因此,我試圖按照LLVM compiler tutorial一起學習,並試圖使用CMake而不是llvm-config
構建玩具示例。由於an issue with Ubuntu's packaging system,我決定從源代碼構建LLVM並鏈接到它。所以我按照指示here從源代碼構建LLVM 3.7.1。我複製粘貼從LLVM的examples/Kaleidoscope
目錄中的第3章源代碼(因爲上面鏈接教程建議爲LLVM的特定版本的使用這樣做),打算用以下CMakeLists.txt
建造它,從this嚴重改編:無法鏈接LLVM編譯器教程程序,而無需使用RTTI構建LLVM
cmake_minimum_required(VERSION 3.5.1)
project(llvm-test-project)
find_package(LLVM REQUIRED CONFIG)
message(STATUS "Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "Using LLVMConfig.cmake in: ${LLVM_DIR}")
message(STATUS "LLVM built with RTTI? ${LLVM_ENABLE_RTTI}")
add_executable(toy toy.cpp)
set_property(TARGET toy PROPERTY CXX_STANDARD 11)
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
llvm_map_components_to_libnames(llvm_libs core support)
target_link_libraries(toy ${llvm_libs})
message(STATUS "LLVM linked to: ${llvm_libs}")
然而,當我嘗試配置和構建它,我得到下面的連接錯誤:
undefinted reference to `typeinfo for llvm:CmpInst`
試圖連接比核心和支持以外的其他庫後,我決定嘗試重新建設LLVM與RTTI已啓用,並且確實足以編譯和鏈接s當我將-DLLVM_ENABLE_RTTI=ON
添加到LLVM cmake
調用時成功。
是否可以在沒有RTTI的情況下構建LLVM,並且仍然可以成功將它鏈接到萬花筒的例子?看起來很奇怪,如果沒有任何教程或LLVM CMake文檔提及RTTI,就需要RTTI。