【发布时间】:2014-03-08 17:06:11
【问题描述】:
我使用的是 Linux Mint 15 Olivia,我安装了存储库中可用的 clang 编译器和 libclang-dev 包,它们是 3.2 版。
我正在尝试从 clang 存储库 http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final/examples/clang-interpreter/main.cpp 编译和链接示例,您可以看到它来自 clang 版本 3.2。
当我用命令编译它时:
$> clang++ `llvm-config --cflags` -c main.cpp
我得到了包含一些未定义符号的文件 main.o 到 clang/llvm 库。我使用 nm 命令确保它包含符号:
$> nm main.o
来自 clang 的符号是
_ZN5clang16CompilerInstanceC1Ev
直到现在一切正常,直到我尝试将“main.o”文件与 clang/llvm 库链接。当我发出命令时:
$> clang++ `llvm-config --ldflags` main.o `llvm-config --libs`
它失败并显示以下输出(我只是把第一个错误放在不让这篇文章混乱):
main.o: In function `main':
main.cpp:74: undefined reference to `clang::TextDiagnosticPrinter::TextDiagnosticPrinter(llvm::raw_ostream&, clang::DiagnosticOptions*, bool)'
基本上,我得到一大堆未定义的对 clang 库的引用。我已经尝试对此进行研究,但我发现这与您将库标志放在命令行上的顺序有关。除此之外,我还尝试了一些其他的东西:
- 我尝试了一堆编译器标志,更改了链接器标志出现的顺序,但它们都不起作用。
- 我下载并编译了 LLVM 和 clang 源代码版本 3.2 和 3.4,结果相同:编译成功,链接失败。值得一提的是,对于每个版本,重新排序链接器标志总是给出不同的链接错误(这当然是由于链接搜索库的方式)。
我的想法已经用完了,并且已经花了 2 个小时尝试从 clang 的存储库中编译一个简单的示例,我们将不胜感激。
谢谢
【问题讨论】:
标签: c++ clang llvm linker-errors clang++