3

ここで非常に単純なものが欠けているように感じます。私は clang をいじってみたいので、出発点として、このビデオの 3:40 あたりのコード例に従いました。コードは次のとおりです。

#include "clang-c/Index.h" // Note: These two lines were 
#include <stdio.h>         // omitted from the video slides
int main(int argc, char *argv[])
{
    CXIndex Index = clang_createIndex(0, 0);
    CXTranslationUnit TU = clang_parseTranslationUnit(Index, 0, argv, argc, 0, 0, CXTranslationUnit_None);
    for (unsigned I = 0, N = clang_getNumDiagnostics(TU); I != N; ++I)
    {
        CXDiagnostic Diag = clang_getDiagnostic(TU, I);
        CXString String = clang_formatDiagnostic(Diag, clang_defaultDiagnosticDisplayOptions());
        fprintf(stderr, "%s\n", clang_getCString(String));
        clang_disposeString(String);
    }
    clang_disposeTranslationUnit(TU);
    clang_disposeIndex(Index);
    return 0;
}

#includeビデオでは、彼は 2 つの指令を省略したとは述べていません。上記の例では、それらを正しく入力したと思います。彼はまた、ファイルがどのようにコンパイルおよびリンクされたかを省略しています。これは、私が問題を抱えている部分です。ここの指示に従って、clang と llvm をチェックアウトしてコンパイルしました。ファイルはチェックアウトされてから~/src/llvmコンパイルされ~/src/build(指示に従って)、上記の簡単なテストプロジェクトを~/src/test. 以下は、gcc の呼び出し方法と出力です。

gcc -I../llvm/tools/clang/include/ -L../build/Debug+Asserts/lib/ -lclang main.cpp -o test
/tmp/ccrpABsq.o: In function `main':
main.cpp:(.text+0x24): undefined reference to `clang_createIndex'
main.cpp:(.text+0x5f): undefined reference to `clang_parseTranslationUnit'
main.cpp:(.text+0x74): undefined reference to `clang_getNumDiagnostics'
main.cpp:(.text+0x8b): undefined reference to `clang_getDiagnostic'
main.cpp:(.text+0x93): undefined reference to `clang_defaultDiagnosticDisplayOptions'
main.cpp:(.text+0xab): undefined reference to `clang_formatDiagnostic'
main.cpp:(.text+0xc0): undefined reference to `clang_getCString'
main.cpp:(.text+0xed): undefined reference to `clang_disposeString'
main.cpp:(.text+0x10d): undefined reference to `clang_disposeTranslationUnit'
main.cpp:(.text+0x118): undefined reference to `clang_disposeIndex'
collect2: ld returned 1 exit status
make: *** [all] Error 1

確認したところ、そのディレクトリにとの~/build/Debut+Asserts/lib両方があります。何が間違っているのかわかりません。グーグルで調べてみましたが、リンク先に関するヒントや指示は見つかりませんでした。とにかく、私はいくつかの異なることを試しましたが、何もうまくいかないようです。libclang.alibclang.so

4

1 に答える 1

5

-lclangの後に入れmain.cppます。gcc静的ライブラリからのシンボルを順番に解決するため、引数の順序は にとって重要です。ライブラリがリンクされている順序によって GCC でエラーが発生することがあるのはなぜですか?も参照してください。.

于 2012-08-28T00:01:38.317 に答える