我正在使用Linux Mint 15 Olivia,我安装了存储库中提供的clang编译器和libclang-dev软件包,它们是版本3.2。
我正在尝试编译并链接clang repository 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库的未定义引用。我已经尝试过对此进行研究,而且我发现所有这些都与你在命令行中放置库标志的顺序有关。除此之外,我还尝试了其他一些事情:
我没有想法,已经花了2个小时尝试从clang的存储库编译一个简单的例子,任何帮助都将不胜感激。
谢谢
答案 0 :(得分:2)
答案很简单 - llvm-config不会给你clang库。您需要单独链接它们。检查clang / tools / driver / Makefile作为库列表的示例。
答案 1 :(得分:2)
这个问题的答案就像Anton Korobeynik建议的那样,我错过了clang库(它不像llvm构建的那样,正如我期望的命令'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`
如果编译任何clang工具或示例,请确保检查clang / tools文件夹下的Makefile:)