2013-06-21 45 views
3

我想在我的項目目錄下開發llvm通。爲此,我按照http://llvm.org/docs/CMake.html#developing-llvm-pass-out-of-source中的信息進行操作。我在這個鏈接中創建了我的CMakeFiles,並且我的最終項目目錄就像;開發llvm通過cmake出llvm源目錄

|-- src 
| |-- CMakeLists.txt 
| |-- bigForPass 
| | |-- CMakeLists.txt 
| | |-- bigForPass.cpp 
| | |-- merged.bc 
| |-- build 

我也鏈接我的源文件與llvm根目錄沒有任何問題。 最後,我在「build」文件夾下構建了該構建,並且使用名稱LLVMHello1.dylib成功創建了我的共享庫,並且沒有任何問題(在build/bin文件夾下)。 然而,當我嘗試用命令

opt -load ../build/bin/LLVMHello1.dylib -bishe_insert <merged.bc> final.bc 

我不斷收到錯誤運行我傳過來merged.bc文件(其中包含我的LLVM代碼);

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. 

對此有任何意見和建議?

非常感謝。

回答

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中,然後它就可以工作。