LLVM插件的未定义符号

时间:2017-03-24 11:32:20

标签: llvm-clang

我尝试构建一个开源LLVM插件(https://github.com/HewlettPackard/Atlas)。 但是当我尝试使用llvm插件进行构建时,我得到一个"错误:无法加载插件...未定义的符号:_ZNK4llvm12FunctionPass17createPrinterPassERNS_11raw_ostreamERKSs" (LLVM :: FunctionPass :: createPrinterPass)。 这可能是由于此处提到的不同ABI问题引起的:undefined symbol for self-built llvm opt?,但使用-D_GLIBCXX_USE_CXX11_ABI = 0构建插件并不能解决问题。

我有Ubuntu 16.04。我尝试了版本3.6,3.8和3.9,问题仍然存在。

构建:(使用clang ++ 3.6,3.8,3.9,有和没有-stdlib = libstdc ++,有和没有-D_GLIBCXX_USE_CXX11_ABI = 0)

clang++-3.9 -D_GLIBCXX_USE_CXX11_ABI=0 -c src/Instrumentation/NvmInstrumenter.cpp -I/usr/lib/llvm-3.9/include -fPIC  -std=c++11 

clang++-3.9 -D_GLIBCXX_USE_CXX11_ABI=0 -shared NvmInstrumenter.o -o NvmInstrumenter.so

clang++-3.9  -Xclang -load -Xclang ./NvmInstrumenter.so  -o oo -c ./r.cpp

最后一行导致未定义的符号错误。

非常感谢任何帮助。甚至关于继续寻找哪个方向的建议也会有所帮助。感谢。

1 个答案:

答案 0 :(得分:0)

经过一番调查后,我发现在编译过程中我没有输入“-fno-rtti”。 http://llvm.1065342.n5.nabble.com/llvm-dev-Undefined-symbol-error-while-running-the-pass-td92634.html