gpt4 book ai didi

c++ - msys2 下的 gcc 和 clang 无法解析包含绝对路径

转载 作者:行者123 更新时间:2023-11-30 02:29:51 25 4
gpt4 key购买 nike

我尝试获取由在 mysys2 管理的 MinGW 环境下工作的 cxxtest 框架生成的测试。该工具生成具有绝对路径的 C++ 文件。但是,gcc 似乎无法解析此绝对路径。

这是一个演示问题的最小示例:

// file1.h
#include <iostream>
inline void hallo() { std::cout << "Hallo\n"; }
// main.cpp
#include "/home/phil/example/file1.h"

int main()
{
hallo();
return 0;
}

文件存在(至少 msys2 shell 解析路径):

$ ls /home/phil/example/file1.h
/home/phil/example/file1.h

...但调用 g++ 会导致此错误:

$ g++ main.cpp
main.cpp:1:38: fatal error: /home/phil/example/file1.h: No such file or directory
#include "/home/phil/example/file1.h"
^
compilation terminated.

与 clang 相同的错误。

在完整的 Linux 环境下,该示例有效。如果我将绝对路径替换为相对路径 (#include "file1.h"),它也会起作用。

因此,我认为问题出在负责解析路径的 Windows 层上。不确定我是否应该将它作为错误报告给 msys2 项目,或者它是否是一个已知问题。如果这是一个已知问题,是否有任何解决方法(例如设置 -I 选项)?

(如果可能的话,我想避免替换绝对路径,因为它们在 cxxtest 框架生成的代码中。从技术上讲,在生成的文件上运行后处理步骤是可能的,但从长远来看似乎是一个 hack .)

最佳答案

由于您正在运行使用 MinGW-w64 作为其运行时环境的编译器,因此它们无法识别这样的 POSIX 样式路径。我认为他们实际上将根目录“/”解释为“C:\”。除此之外,他们只会识别原生 Windows 风格的路径。

我建议你传递参数 -I/home/phil/example从在 msys-2.0.dll POSIX 仿真运行时环境(例如/usr/bin/bash 或/usr/bin/make)中运行的某些程序到您的编译器。然后 msys-2.0.dll 运行时会将该参数转换为使用 native Windows 路径,以便编译器可以理解它,以及像 #include <file1.h> 这样的语句。将工作。或者,您可以尝试在源代码中放置一个 Windows 风格的路径,例如路径应以 C:\ 开头.

但是请注意,在源代码或构建脚本中使用绝对路径不是一个好主意,因为这会使在不同计算机上构建代码变得更加困难。您可以考虑使用环境变量或相对路径。

关于c++ - msys2 下的 gcc 和 clang 无法解析包含绝对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39254848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com