macos - clang 插件编译错误: undefined symbol llvm::Registry<clang::PluginASTAction,llvm::RegistryTraits<clang::PluginASTAction>>

标签 macos plugins clang llvm

我正在尝试构建 llvm clang samples 。 除了 plugin_print_funcnames.cpp 之外,一切正常插件编译。代码可以在这里找到:plugin_print_funcnames.cpp

clang++ 好像找不到库 llvm:Registry<>不在 llvm 库中。 我使用brew中的llvm/clang命令brew install llvm

可能出了什么问题?

这是一个命令行:

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:

最佳答案

我确信您早就不需要这个了,但我遇到了类似的问题。这是您的具体问题的答案以及我用来找出答案的命令。进入 llvm/clang lib 目录并输入:

$ 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 X。

关于macos - clang 插件编译错误: undefined symbol llvm::Registry<clang::PluginASTAction,llvm::RegistryTraits<clang::PluginASTAction>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26921130/

相关文章:

c++ - Clang 中带有静态 constexpr 的奇怪的循环模板模式 (CRTP)

api - 我应该使用哪种 API 将用户权限提升为 Mac OS X 中的 super 用户?

plugins - 无法解析grails中的插件类

plugins - 在执行 mvn clean install 时如何使用 main() 运行类

arduino - Clang + AVR 编译错误 : '=w' in asm

android - 如何为Android编译并运行简单的C代码?

swift - 水平和垂直嵌套 ScrollView

ios - 可重用的 Swift 扩展和选择器

java - 类 JavaLaunchHelper 在两个地方实现

php - 索引中的 Wordpress 插件样式