WIng上的Clang发现VC头而不是GCC

时间:2016-05-28 15:17:12

标签: windows c++11 clang++ mingw-w64

当我安装了Clang 3.7时,它会从我的GCC安装中找到STL标题,只要路径中只包含这两个目录。

现在我已经安装了Clang 3.8,编译器不断找到Visual Studio头文件,尽管它甚至不在路径中

我的路径如下:

PATH=whatever;G:\Compilers\LLVM\bin;g:\compilers\Mingw64-64bit\bin

修改1

我已经知道正确的包含路径是什么,但是我在Codelite中尝试了一个编译,发现了这些:

"-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include\\c++"   
"-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include\\c++\\x86_64-w64-mingw32"
"-IG:\\Compilers\\Mingw64-64bit\\lib\\gcc\\x86_64-w64-mingw32\\5.1.0\\include"
"-IG:\\Compilers\\Mingw64-64bit\\lib\\gcc\\x86_64-w64-mingw32\\5.1.0\\include-fixed" "-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include" 
"-IG:\\Compilers\\Mingw64-64bit\\x86_64-w64-mingw32\\include\\c++\\backward" 

我还使用方言旗--std=c++11

然而,使用C ++库的一个非常简单的程序给了我错误,例如

 G:\Compilers\Mingw64-64bit\x86_64-w64-mingw32\include\c++\bits/stringfwd.h:63:33: error: use of undeclared identifier 'char16_t'
   template<> struct char_traits<char16_t>;
                            ^

修改2

现在按照Martin的建议传递x86_64-w64-mingw32,自动发现过程似乎有效,但生成的可执行文件只是冻结。

当我尝试使用VS2015 Clang工具集时,我发现了相同的内容

我正在使用的代码示例是

#include <iostream>

int main()
{
   int arr[] = {1, 2, 3, 4, 5};
   for(auto el : arr)
   {
      std::cout << el << std::endl;
   }
   return 0;
}

我现在正在编译:

clang++ -v --target=x86_64-w64-mingw32 hello.cpp -o test.exe -std=c++14

我查看了使用Dependency Walker生成的可执行文件,它显示为64位编译并链接到"g:\Compilers\Mingw64-32Bit\bin\libstdc++-6.dll"

我认为下一步是尝试编译32位版本,但我似乎找不到正确的目标名称

我刚试过clang++ hello.cpp -o main.exe -std=c++14 --target=i686-pc-mingw32 -v

这似乎产生了32位可执行文件,但它又冻结了

注意我更新了指向32位clang的路径。

编辑3

我觉得令人困惑的是,在我通过x86_64-w64-mingw32作为目标之前,我通过GCC路径和MSVC的默认目标(其中两者似乎都与{{1}相关)得到了非常相似的错误和类似的类型

看到这个我认为如果传递目标可能会修复VC编译器错误

虽然这种方式似乎有效但它只会产生更多问题,因为它一直要求libs链接到我并且我不知道正确的

所以我试过了:

char16_t

我不知道要传递的正确目录是什么。

我感觉我需要传递另一个lib文件,因为我收到此错误

libcmt.lib(thread_safe_statics.obj):错误LNK2019:未解析的外部符号__imp_CloseHandle

1 个答案:

答案 0 :(得分:1)

你改变了目标吗? VC是新的默认值。将此(示例)用于x64,mingw:

clang ++ --target = x86_64-w64-mingw32 test.cpp

不要忘记链接器。