gpt4 book ai didi

c++ - 无法在不使用 RTTI 构建 LLVM 的情况下链接 LLVM 编译器教程程序

转载 作者:行者123 更新时间:2023-11-28 05:00:03 25 4
gpt4 key购买 nike

所以我正在尝试跟随 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 :

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`

在尝试链接到核心和支持以外的其他库后,我决定尝试重新构建启用 RTTI 的 LLVM,果然,当我添加 -DLLVM_ENABLE_RTTI=ON 时,它​​编译并成功链接> 到 LLVM cmake 调用。

是否有可能在没有 RTTI 的情况下构建 LLVM 并仍然成功地将其链接到 Kaleidoscope 示例?教程或 LLVM CMake 文档中都没有提及 RTTI,这似乎很奇怪。

最佳答案

想通了!事实证明,我的项目默认是使用 RTTI 构建的,因此只有当 LLVM 也使用 RTTI 构建时,它才会正确链接。添加 -fno-rtti 编译标志解决了这个问题。

关于c++ - 无法在不使用 RTTI 构建 LLVM 的情况下链接 LLVM 编译器教程程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46258345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com