LLVM 插件的未定义符号



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

我有 Ubuntu 16.04。我尝试了 clang 版本 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

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

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

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

最新更新