4

我已经设法使用 Visual Studio 210 在 Windows 7 上构建了 clang,现在我喜欢将它与 codeblocks IDE 一起使用。因此,我将 clang 可执行文件复制到了 mingw bin\ 文件夹中,并更新了代码块的编译器设置以使用 clang 而不是 gcc。

但是当我编译 hello world 示例时,出现以下错误:

||=== clang_test, Debug ===|
obj\Debug\main.o:c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error|447|undefined reference to `std::iostream_category()'|
obj\Debug\main.o:c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdexcept|170|undefined reference to `std::exception::exception(char const* const&)'|
||=== Build finished: 2 errors, 0 warnings ===|

我想我必须使用 clang 的头文件,但我该怎么做呢?

谢谢!

4

3 回答 3

8

更新

MSYS2 软件包可用于 32 位和 64 位的 clang,从我所做的有限测试来看,它似乎工作得很好。编译器可以在 MSYS2 环境之外使用。

关于如何安装 MSYS2,请参见此处。然后运行

pacman -Sy mingw-w64-x86_64-clang

或者

pacman -Sy mingw-w64-i686-clang

在更新 MSYS2 以安装 Clang 之后。

该软件包中使用的补丁(如果您想自己构建 LLVM/Clang)位于此处


旧回复如下,略过时

如果你想在 Windows 上为 C++ 使用 Clang,你目前唯一的选择是使用(或自己构建)Clang with/for MinGW(-w64)。

幸运的是,我提供包:

将两者解压缩到同一目录并添加mingw32-dw2/binPATH,或将 Codeblocks 指向它。您将受限于 GCC 4.6 的 libstdc++。不过,Clang 3.2 的 C++11 语言支持功能齐全。

请注意,Clang 需要 GCC 样式选项,因此我建议修改 Codeblocks GCC 构建过程并替换g++clang++和。gccclang

于 2013-01-19T22:20:28.387 回答
1

clang 尚不支持 MSVC C++ ABI,因此无法正确编译 C++ 代码。

更新:截至 2014 年 12 月,clang 确实支持 MSVC,但 (heh) 例外。要编译代码,你必须做

clang-cl.exe /D_HAS_EXCEPTIONS=0 foo.cpp

如果要直接使用 clang.exe:

clang++ -target i686-pc-windows-msvc -D_HAS_EXCEPTIONS=0 foo.cpp -o foo.exe

等等

有关 MSVC 支持的最新状态,请参阅http://clang.llvm.org/docs/MSVCCompatibility.html

于 2013-01-19T22:03:49.953 回答
0

我的 CodeBlocks 构建日志将命令行显示为

clang++.exe -fno-ms-兼容性 -fno-use-cxa-atexit -IC:\mingw\include\c++\4.7.0 -IC:\mingw\include\c++\4.7.0\x86_64-w64-mingw32 - IC:\mingw\include\c++\4.7.0\backward -IC:\mingw\include -c C:\Users\Vipul\Documents\Hello.cpp -o C:\Users\Vipul\Documents\Hello.o

ld.exe -oC:\Users\Vipul\Documents\Hello.exe C:\Users\Vipul\Documents\Hello.o -m i386pep -Bdynamic -Lc:\mingw\lib c:\mingw\lib\crt2.oc :\mingw\lib\crtbegin.o -lstdc++ -lmingw32 -lgcc_s -LC:\Windows\SUA\opt\gcc64\lib\gcc\x86_64-pc-interix6\4.6.0 -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 c:\mingw\lib\crtend.o

我可以运行程序。我已经用 VSExpress 构建了 Windows clang。如果编译或链接最终导致错误,那么比较我们的命令行可能有助于隔离问题。

于 2013-03-04T13:42:32.870 回答