【问题标题】:Errors when linking against clang与 clang 链接时出错
【发布时间】:2012-08-27 23:57:06
【问题描述】:

我觉得我在这里遗漏了一些非常简单的东西。我想玩一下 clang,所以作为起点,我遵循了 this video, around 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 指令。我认为我在上面的示例中正确填写了这些内容。他还省略了文件的编译和链接方式,这是我遇到问题的部分。按照here 的说明,我检查并编译了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。我不确定我做错了什么。我试过谷歌搜索,但没有找到任何提示或关于我应该链接什么的说明。无论如何,我尝试了一些不同的东西,但似乎没有任何效果。

【问题讨论】:

    标签: c linker clang linker-errors


    【解决方案1】:

    -lclang 放在main.cpp 之后。参数的顺序对gcc 很重要,因为它按顺序解析静态库中的符号。另见Why does the order in which libraries are linked sometimes cause errors in GCC?

    【讨论】:

    • 天哪,我是个白痴。当你的答案出现时,我意识到了这一点。谢谢。
    猜你喜欢
    • 2022-01-22
    • 2010-12-28
    • 2012-06-20
    • 1970-01-01
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 2014-09-29
    相关资源
    最近更新 更多