2013-03-05 79 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

相關問題