我正在尝试构建llvm clang样本。除了plugin_print_funcnames.cpp插件编译之外,一切都很好。代码在这里找到:funcnames.cpp
似乎clang++找不到库llvm:Registry<>不在llvm库中。我通过命令brew install llvm使用brew中的llvm/clang。
可能出什么事了?
这是一个命令行:
g++ -fpic -fno-rtti -O0 -g `/usr/local/Cellar/llvm/HEAD/bin/llvm-config --cxxflags` -I$HOME/llvm/from_git/llvm/tools/clang/include -I/usr/local/Cellar/llvm/HEAD/tools/clang/include src_clang/plugin_print_funcnames.cpp \
-shared `/usr/local/Cellar/llvm/HEAD/bin/llvm-config --ldflags --libs --system-libs` -o build/plugin_print_funcnames.so这些都是错误消息的一部分:
Undefined symbols for architecture x86_64:
"llvm::Registry<clang::PluginASTAction, llvm::RegistryTraits<clang::PluginASTAction> >::ListenerHead", referenced from:
__GLOBAL__I_a in plugin_print_funcnames-342dff.o
"llvm::Registry<clang::PluginASTAction, llvm::RegistryTraits<clang::PluginASTAction> >::Head", referenced from:发布于 2016-06-24 07:43:08
我相信你早就不需要这个了,但我遇到了一个类似的问题。这是你的具体问题的答案,以及我用来找出答案的命令。进入llvm/clang目录并键入:
$ nm -o *.a |grep Registry |grep PluginASTAction |cut -d ':' -f 1 |uniq
libclangFrontend.a
libclangFrontendTool.a-o标记到nm非常重要,因为它告诉nm在每一行上打印文件名,所以当grep找到匹配时就有上下文了。
在使用答案中的技术找到链接行后,将适当的库添加到链接行。然后,如果得到另一个链接器错误,则重复该过程。最后一个就消失了。例如,在上面的例子中,您可以添加-lclangFrontend -lclangFrontendTool。
对我来说,这是一个由大约10个不同的图书馆组成的过程,我不得不这样去寻找。
我认为我必须添加的内容列表是:-lclangSerialization -lclangASTMatchers -lclangSema -lclangAnalysis -lclangRewriteFrontend -lclangEdit -lclangParse -lclangFrontend -lclangBasic -lclangDriver -lclangAST -lclangLex,但这是运行llvm/bin/llvm-config --ldflags --libs --system-libs之后的内容之一。在撰写本报告时,这是最新的OS版本。
https://stackoverflow.com/questions/26921130
复制相似问题