1

なぜclang ++はこれをコンパイルするのですか:

#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;
}
???

コマンドライン:

clang++ -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)

Windows 7 64、clang-3.2、llvm-3.2、VS2012


=====更新=====

コマンド ライン (-v を使用):

clang++ -c hello.cpp -emit-llvm -o hello.bc -v

私が得るもの:

clang バージョン 3.2 (タグ/RELEASE_32/final)
ターゲット: i686-pc-win32
スレッドモデル: 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-
合成プロパティ -fcxx-例外 -f例外 -fdiagnostics-show-option -f
color-diagnostics -o "C:\llvm\3211.bc" -x c++ "C:\llvm\321.cpp"
LLVM 3.2svn のデフォルト ターゲット i686-pc-win32 に基づく clang -cc1 バージョン 3.2
    #include "..." 検索はここから始まります:
    #include <...>検索はここから始まります:
 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
検索リストの終わり。
C:\llvm\321.cpp:1 からインクルードされたファイル:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\inc からインクルードされたファイル
lude\iostream:6:
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: エラー:
      '_Ty' は値を参照していません
                _HAS_TRIVIAL_MOVE_CONSTRUCTOR(_Ty)
                                              ^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\type_traits:52:38
: ノート:
      マクロ '_HAS_TRIVIAL_MOVE_CONSTRUCTOR' から展開
                        && __has_trivial_move_constructor(_Ty)>
                                                          ^
...等。

だから...-internal-isystem間違ったパスを指してください。変更方法は?

4

1 に答える 1

1

clang のインクルード パスが正しく構成されていません。これ:

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

VS 2012 インストールのヘッダー ファイルであり、clang と関係があることに注意してください (明らかに互換性がありません)。

環境が VC++ コンパイル用に設定されていないことを確認してください。たとえば、INCLUDEVC++ 用に設定された環境変数がないことを確認します。など、clang に対して不適切に設定されていないことを確認するための他の環境変数もある場合がありますLIB

于 2013-03-05T16:37:22.890 に答える