我尝试使用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})
行,包括我的项目所需的库和消除依赖性,然后还有另一个错误:
CommandLine错误:选项'x86-use-base-pointer'注册超过 一旦!致命错误:后端错误:已注册的不一致 CommandLine选项
我很感激任何好的建议!