我正在尝试在项目目录下开发llvm传递。为此,我按照http://llvm.org/docs/CMake.html#developing-llvm-pass-out-of-source中的信息进行操作。我在这个链接中正确创建我的CMakeFiles,我的最终项目目录就像;
|-- src
| |-- CMakeLists.txt
| |-- bigForPass
| | |-- CMakeLists.txt
| | |-- bigForPass.cpp
| | |-- merged.bc
| |-- build
我还将我的源文件与llvm根目录链接没有任何问题。 最后,我在“build”文件夹下进行构建,并且我的共享库成功创建,没有任何问题(在build / bin文件夹下),名称为LLVMHello1.dylib。 但是,当我尝试使用命令运行我对merged.bc文件(包含我的llvm代码)的传递时
opt -load ../build/bin/LLVMHello1.dylib -bishe_insert <merged.bc> final.bc
我一直收到错误;
Error opening '../build/bin/LLVMHello1.dylib': dlopen(../build/bin/LLVMHello1.dylib, 9): Symbol not found: __ZTIN4llvm10ModulePassE
Referenced from: ../build/bin/LLVMHello1.dylib
Expected in: flat namespace
in ../build/bin/LLVMHello1.dylib
-load request ignored.
对此有何意见和建议表示赞赏?
提前多多感谢。
答案 0 :(得分:6)
来自http://www.jiang925.com/node/28
未定义的符号:_ZTIN4llvm12FunctionPassE存在不一致 LLVM主构建系统和cmake支持构建之间 外的源。 LLVM二进制文件在没有运行时类型信息的情况下构建 “-fno-RTTI”。因此,必须建立源外通行证 同样的方式,否则选择会抱怨这个符号 “_ZTIN4llvm12FunctionPassE”未定义。
要解决此问题,必须在启用RTTI的情况下编译LLVM。加 “-DLLVM_REQUIRES_RTTI = 1”到cmake,或添加“REQUIRES_RTTI = 1”来制作。
所以我将SET(CMAKE_CXX_FLAGS "-Wall -fno-rtti")
添加到我的通行证库的CMakeLists.txt中,然后它正在运行。