使用clke从llvm源目录开发llvm传递

kay*_*han 3 cmake llvm

我正在尝试在我的项目目录下开发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
Run Code Online (Sandbox Code Playgroud)

我还将我的源文件与llvm根目录链接没有任何问题.最后,我在"build"文件夹下进行构建,并且我的共享库成功创建,没有任何问题(在build/bin文件夹下),名称为LLVMHello1.dylib.但是,当我尝试使用命令运行merged.bc文件(包含我的llvm代码)的传递时

opt -load ../build/bin/LLVMHello1.dylib -bishe_insert <merged.bc> final.bc
Run Code Online (Sandbox Code Playgroud)

我一直在收到错误;

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.
Run Code Online (Sandbox Code Playgroud)

对此有何意见和建议表示赞赏?

非常感谢提前.

小智 6

来自http://www.jiang925.com/node/28

未定义的符号:_ZTIN4llvm12FunctionPassE LLVM主构建系统与构建外部源的cmake支持之间存在不一致.LLVM二进制文件是在没有运行时类型信息"-fno-rtti"的情况下构建的.因此,必须以相同的方式构建源外传递,否则opt将抱怨符号"_ZTIN4llvm12FunctionPassE"未定义.

要解决此问题,必须在启用RTTI的情况下编译LLVM.将"-DLLVM_REQUIRES_RTTI = 1"添加到cmake,或添加"REQUIRES_RTTI = 1"进行制作.

所以我添加SET(CMAKE_CXX_FLAGS "-Wall -fno-rtti")到我的pass库的CMakeLists.txt然后它正在工作.