我尝试使用 CMake 编译我的 LLVM 项目(共享库)。 在链接阶段出现问题。
我使用本教程:http://llvm.org/docs/CMake.html#developing-llvm-passes-out-of-source
project_dir/
|
CMakeLists.txt
<passName>/
|
CMakeLists.txt
sourceFile1.cpp
sourceFile2.cpp
…
project_dir/CMakeLists.txt 的内容:
cmake_minimum_required(VERSION 3.4.3) project(MyProjectSharedLib)
find_package(LLVM REQUIRED CONFIG)
list(APPEND CMAKE_MODULE_PATH "${LLVM_CMAKE_DIR}")
include(AddLLVM)
message(STATUS "!!! Found LLVM ${LLVM_PACKAGE_VERSION}")
message(STATUS "!!! Using LLVMConfig.cmake in: ${LLVM_DIR}")
set (CMAKE_CXX_STANDARD 11)
include_directories(${LLVM_INCLUDE_DIRS})
add_definitions(${LLVM_DEFINITIONS})
add_subdirectory(passName)
project_dir/passName/CMakeLists.txt 的内容:
add_llvm_loadable_module(MyProjectSharedLib
sourceFile1.cpp
sourceFile2.cpp
…
)
编译和链接后创建了一个共享库MyProjectSharedLib.so,但是当我运行Clang或Opt并使用此库时出现错误:
错误:无法加载插件 '/path-to-my-shared-lib/MyProjectSharedLib.so': '/path-to-my-shared-lib/MyProjectSharedLib.so:未定义的符号: _ZN4llvm11RuntimeDyld13MemoryManager6anchorEv'
这意味着我的共享库中缺少一些定义符号。
当我添加project_dir/passName/CMakeLists.txt时:
llvm_map_components_to_libnames (llvm_libs irreader x86codegen mcjit)
target_link_libraries(MyProjectSharedLib ${llvm_libs})
行,其中包含到我的项目所需的库并消除依赖,然后又出现另一个错误:
命令行错误:选项“x86-use-base-pointer”注册超过 一次!致命错误:后端错误:注册不一致 命令行选项
我将不胜感激任何好的建议!