2014-02-11 72 views
1

我正在使用Linux Mint 15 Olivia,并且我在版本库中安装了可用的clang编译器和libclang-dev软件包,它们是3.2版本。在Linux上与clang/llvm库链接总是失败

我想编译并链接来自ng版本库http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_32/final/examples/clang-interpreter/main.cpp的示例,因为您可以看到它来自铿锵声版本3.2。

当我用命令编译它:

$> clang++ `llvm-config --cflags` -c main.cpp 

我得到了其中包含了一些不确定的符号铛/ LLVM库的文件main.o。我确信它利用纳米命令包含符号:

$> nm main.o 

从铛符号将

_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)' 

基本上,我得到了一大堆未定义的引用来铿锵图书馆。我已经尝试过对此进行研究,并且我发现所有这一切都与您在命令行上放置库标记的顺序有关。除此之外,我也尝试过一些其他的事情:

  1. 我尝试了一堆编译器标志,改变其连接标志出现的顺序,他们从来没有工作过。
  2. 我下载并编译了LLVM和clang源代码3.2和3.4版,结果相同:编译工作,链接失败。值得一提的是,对于每个版本,重新排序链接器标志总是给出不同的链接错误(这当然是由于链接搜索库的方式)。

我用完了想法,已经花了2个小时试图从clang的仓库编译一个简单的例子,任何帮助将不胜感激。

谢谢

回答

2

答案很简单 - LLVM-配置不会给你铛库。你需要分开链接它们。检查clang/tools/driver/Makefile作为库列表的示例。

+0

感谢您的答复,我会尝试,只要我得到我的手我的发展电脑 – elfus

+0

那天晚上我绝对是累了,失明....我用那个Makefile作为例子,并且还使用了标志的顺序,因为铛取决于llvm,现在它编译:) 谢谢! – elfus

2

这个问题的答案是Anton Korobeynik建议的,我错过了clang库(它不是llvm build的一部分,因为我期望从命令'llvm-config --libs')。

在年底最后的命令竟然是:

clang++ `llvm-config --ldflags` main.o -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization -lclangCodeGen -lclangParse -lclangSema -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangAnalysis -lclangARCMigrate -lclangRewriteFrontend -lclangRewriteCore -lclangEdit -lclangAST -lclangLex -lclangBasic `llvm-config --libs` 

如果编译任何铛工具或示例,请务必检查Makefile的下铛/ tools文件夹:)