我尝试构建一个开源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
最后一行导致未定义的符号错误。
非常感谢任何帮助。甚至关于继续寻找哪个方向的建议也会有所帮助。感谢。
答案 0 :(得分:0)
经过一番调查后,我发现在编译过程中我没有输入“-fno-rtti”。 http://llvm.1065342.n5.nabble.com/llvm-dev-Undefined-symbol-error-while-running-the-pass-td92634.html