使用CMake for LLVM链接共享库

时间:2017-02-03 14:06:06

标签: c++ cmake linker llvm

我尝试使用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选项

我很感激任何好的建议!

0 个答案:

没有答案