2013-03-05 88 views
1

为什么铛++编译如下:为什么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指向错误的路径。如何改变它?

回答

1

对于clang,您的包含路径配置不正确。这个:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xrefwrap 

是来自VS 2012安装的头文件,并且注意到与叮当(并且显然与它不兼容)。

确保你的环境没有为VC++编译设置。例如,确保没有为VC++设置的INCLUDE环境变量。可能还有其他env变量,以确保不会为clang设置不适当的值,例如LIB

+0

谢谢。但我无法找到这个环境变量。它隐藏在哪里? – kpdev 2013-03-05 16:44:46

+1

因此,如果你从命令行设置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

+0

如果我做'设置INCLUDE'(或'设置LIB'),它会说'variables not defined'。问题更新中的'-v'选项的rezult。 – kpdev 2013-03-06 12:03:47