2014-11-14 45 views
1

我試圖構建llvm clang samples。 一切工作正常,除了plugin_print_funcnames.cpp插件編譯。代碼在這裏找到:plugin_print_funcnames.cppclang插件編譯錯誤:未定義符號llvm :: Registry <clang :: PluginASTAction,llvm :: RegistryTraits <clang :: PluginASTAction>>

看起來像鐺++無法找到庫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: 

回答

1

我相信你早已過去需要這一點,但我遇到了一個類似的問題。下面是你的具體問題的答案以及我用來找出答案的命令。進入LLVM /鐺lib目錄和類型:

$ nm -o *.a |grep Registry |grep PluginASTAction |cut -d ':' -f 1 |uniq 
libclangFrontend.a 
libclangFrontendTool.a 

-o標誌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。

+0

您能否詳細說明如何刪除錯誤信息? – prosseek