Set*_*gie 51 c c++ windows clang
我一直试图找到一种方法让Clang在Windows上工作,但遇到了麻烦.我让Clang成功编译,但是当我尝试编译程序时,我在标准头文件中有一堆错误.
我知道rubenvb的优秀预装版本的clang,但我想为自己编译它.我也在听GoingNative谈论clang,它说它还没有很好的Windows支持.我如何让Windows在Windows上工作?
Set*_*gie 56
我使用以下方法在Windows 7上为C++编译clang,并且已经由Mysticial和其他人验证:
运行命令 cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ..\llvm-3.0.src
(最后一个参数是其中包含llvm源的文件夹的相对路径(以及tools/clang子目录中的clang源))
这将相当于"configure"命令,makefile和所有内容都将在build文件夹中生成
运行命令 mingw32-make
-j<number>选项)最好关闭所有其他程序,以便您的计算机可以集中精力,因此它们不会干扰冗长的编译过程,例如锁定编译器正在写入的文件夹(它发生在我身上).我甚至关闭了我的防病毒和防火墙软件,这样他们就不会尝试扫描生成的文件并妨碍我们.是时候测试一下了
在build/bin文件夹中创建一个.cpp文件(我将使用hello.cpp).使用标准库头来确保包含路径和库正常工作.从一个非常简单的程序开始.
(我的开头:
#include <iostream>
int main() {
std::cout << "hi";
}
Run Code Online (Sandbox Code Playgroud)
)
运行命令 clang hello.cpp -std=c++0x -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++" -I"C:\MinGW\lib\gcc\mingw32\4.6.1\include\c++\mingw32" -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1 -Lc:/mingw/bin/../lib/gcc -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../../../mingw32/lib -Lc:/mingw/bin/../lib/gcc/mingw32/4.6.1/../../.. -L/mingw/lib -lstdc++ -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt -ladvapi32 -lshell32 -luser32 -lkernel32 -lmingw32 -lgcc_s -lgcc -lmoldname -lmingwex -lmsvcrt
(-L指定要在其中搜索库的目录,-l指定要链接的库)(如果没有将MinGW安装到与我相同的路径,则可以使用命令"g ++ somefile"找到路径. cpp -v"让g ++泄漏其关于库路径和库文件使用的选项以及其他所有选项的内容.在输出结尾附近搜索-L和-l选项.请注意.o文件用-L's散布的名字.Clang使用许多与g ++相同的选项,所以我从g ++的输出中复制并粘贴了那一行
这应该编译您的程序并生成一个名为a.out的文件
将a.out重命名为a.exe或其他任何内容
Clang(3.0)在Windows上仍有一些问题(我不知道这些问题是否也出现在linux上).例如,使用-std = c ++ 0x编译lambda(clang不支持)将导致clang崩溃并发出诊断错误.(我在LLVM IRC上被告知这是因为clang实现了对lambdas的解析而不是语义分析,这是崩溃的阶段(因为他们忘了禁用解析3.0版本的lambdas),并且他们已经知道这个BUG)
此外,杰出的Mysticial友好地同意测试本指南,并在测试期间做了一些观察:
这里是什么工作在我的环境中,在Windows 8.1,整体类似于Seth的指令,但新鲜的工具.
C:/MinGW,准确地说我使用过STL的发行版.cmake -G "MinGW Makefiles" -D"CMAKE_MAKE_PROGRAM:FILEPATH=C:/MinGW/bin/make.exe" -DCMAKE_BUILD_TYPE=Release ..\llvm 由于某种原因,CMake无法自动找到"make")Run Code Online (Sandbox Code Playgroud)#include <iostream> int main() { []{ std::cout << "hi"; }(); }
Run Code Online (Sandbox Code Playgroud)set PATH=<path to the build folder from step 5>/bin;c:/mingw/bin;%PATH% clang++ -std=c++11 1.cpp -o 1.exe -I"C:/MinGW/include" -I"C:/MinGW/include/c++/4.9.1" -I"C:\MinGW\include\c++\4.9.1\x86_64-w64-mingw32" -I"C:\MinGW\x86_64-w64-mingw32\include"
什么行不通:
cmake -G "Visual Studio 12" ..\llvm在Visual Studio中运行 然后编译解决方案.但是,Clang无法编译样本cpp,它在MinGW标准库头中抱怨"未声明的标识符'char16_t'"和"此目标不支持__int128".如果我使用clang-cl和MS STL头文件,则会抱怨"throw x(y)"说明符.也许我需要为构建提供一些额外的密钥,但我无法让它工作.C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\xiosbase(293,4):错误:无法编译此throw表达式_THROW_NCEE(失败,"ios_base :: eofbit set"); C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include\xstddef(56,30):注意:从宏'_THROW_NCEE扩展'#define _THROW_NCEE(x,y)throw x(y)
| 归档时间: |
|
| 查看次数: |
38857 次 |
| 最近记录: |