为什么Clang ++不能在Windows上编译代码?
问题描述:
为什么铛++编译如下:为什么Clang ++不能在Windows上编译代码<header>?
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
printf("Hello World!\n");
return EXIT_SUCCESS;
}
,不想编译如下:
#include <iostream>
int main()
{
std::cout << "FFFF\n";
return 0;
}
???
命令行:
铛++ -c HELLO.CPP -emit,LLVM -o hello.bc
太多的错误像这样发出:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xrefwrap:222:22:
note:
expanded from macro '_CLASS_RESULT_OF_PMF_OPT_0X'
__thiscall, X2, X3, X4)
视窗7 64,铛-3.2,LLVM-3.2,VS2012
===== UPDATE =====
命令行(与-v):
clang++ -c hello.cpp -emit-llvm -o hello.bc -v
我得到什么:
clang version 3.2 (tags/RELEASE_32/final) Target: i686-pc-win32 Thread model: posix "C:/llvm/clang/build/bin/Debug/clang++.exe" -cc1 -triple i686-pc-win32 -emit-ll vm-bc -disable-free -main-file-name 321.cpp -mrelocation-model static -mdisable- fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -target-cpu pentium4 -m omit-leaf-frame-pointer -v -coverage-file "C:\llvm\3211.bc" -resource-dir "C:/ llvm/clang/build/bin/Debug\..\lib\clang\3.2" -fmodule-cache-path "C:\Users\ \kpdev\AppData\Local\Temp\clang-module-cache" -internal-isystem C:/llvm/clan g/build/bin/Debug/../lib/clang/3.2/include -internal-isystem "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include" -internal-isystem "C:\Program Files (x86)\Windows Kits\8.0\\include" -std=c++11 -fdeprecated-macro -ferro r-limit 3 -fmessage-length 80 -mstackrealign -fms-extensions -fms-compatibility -fmsc-version=1300 -fdelayed-template-parsing -fobjc-runtime=gcc -fobjc-default- synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -f color-diagnostics -o "C:\llvm\3211.bc" -x c++ "C:\llvm\321.cpp" clang -cc1 version 3.2 based upon LLVM 3.2svn default target i686-pc-win32 #include "..." search starts here: #include <...>search starts here: C:/llvm/clang/build/bin/Debug/../lib/clang/3.2/include C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include C:\Program Files (x86)\Windows Kits\8.0\include End of search list. In file included from C:\llvm\321.cpp:1: In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\inc lude\iostream:6: In file included from C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\inc lude\istream:6:...等。
然后:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\type_traits:1072: 33: error: '_Ty' does not refer to a value _HAS_TRIVIAL_MOVE_CONSTRUCTOR(_Ty) ^ C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\type_traits:52:38 : note: expanded from macro '_HAS_TRIVIAL_MOVE_CONSTRUCTOR' && __has_trivial_move_constructor(_Ty)> ^...等。
所以... -internal-isystem
指向错误的路径。如何改变它?
答
对于clang,您的包含路径配置不正确。这个:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xrefwrap
是来自VS 2012安装的头文件,并且注意到与叮当(并且显然与它不兼容)。
确保你的环境没有为VC++编译设置。例如,确保没有为VC++设置的INCLUDE
环境变量。可能还有其他env变量,以确保不会为clang设置不适当的值,例如LIB
。
谢谢。但我无法找到这个环境变量。它隐藏在哪里? – kpdev 2013-03-05 16:44:46
因此,如果你从命令行设置INCLUDE,它会说'环境变量INCLUDE未定义'还是别的东西?如果你使用该命令从命令行(而不是IDE或其他东西)构建,并且没有'INCLUDE'环境变量,那么我不确定为什么clang会搜索'C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ INCLUDE'。但是我的Windows机器上没有安装clang,所以我现在无法尝试或测试。您可能会看到'-v'选项是否提供了有用的信息。 – 2013-03-05 18:11:40
如果我做'设置INCLUDE'(或'设置LIB'),它会说'variables not defined'。问题更新中的'-v'选项的rezult。 – kpdev 2013-03-06 12:03:47