CMAKE:如何在Cmakelists.txt中构建多个库
CMake: How to build multiple libraries within the CMakeLists.txt?
使用llvm,我尝试在单个项目中创建多个模块:
cmake_minimum_required(VERSION 3.5.1)
project("SplitWMPass")
add_library(SplitWMPass MODULE
# List your source files here.
SplitWMPass.cpp
)
add_library(WMCheckerTPass MODULE
WMCheckerTPass.cpp)
# LLVM is (typically) built with no C++ RTTI. We need to match that;
# otherwise, we'll get linker errors about missing RTTI data.
set_target_properties(SplitWMPass PROPERTIES
COMPILE_FLAGS "-fno-rtti"
)
# Get proper shared-library behavior (where symbols are not necessarily
# resolved when the shared library is linked) on OS X.
if(APPLE)
set_target_properties(SplitWMPass PROPERTIES
LINK_FLAGS "-undefined dynamic_lookup"
)
endif(APPLE)
如果我只指定一个add_library()
,则可以正常工作,但是使用两个库会使第二个库失败:
nlykkei@nlykkei-Ubuntu:~/llvm-ir-obfuscation$ opt -load cmake-build-debug/water/libWMCheckerTPass.so
Error opening 'cmake-build-debug/water/libWMCheckerTPass.so': cmake-build-debug/water/libWMCheckerTPass.so: undefined symbol: _ZTIN4llvm10ModulePassE
我想知道如何在项目中构建多个库?
一切正常,如果我用自己的cmakelists构建第二个库。
您需要在CMakeLists.txt
set_target_properties(WMCheckerTPass PROPERTIES
COMPILE_FLAGS "-fno-rtti"
)
您的LLVM
工具链是使用禁用RTTI(默认值(构建的,但是您的新模块已启用,因此您需要复制LLVM
构建设置,因为您的库将由opt
加载,并且您不应生成当前的符号不存在(与您的错误一样(。
另外,如果您在终端上运行此操作:
c++filt _ZTIN4llvm10ModulePassE
您会得到
typeinfo for llvm::ModulePass
这是一个明显的指示。
也是一个好主意,也可以复制LLVM
的设置以例外。请参阅此处的基本示例CMAKE文件。与CMAKE结合使用的LLVM
安装中要查看的密钥文件是LLVMConfig.cmake
。
可以在此处找到相关文档。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 无法在 CLion 中构建 C++ 项目
- 函数向量_指针有不同的原型,我可以构建一个吗
- 如何使用ndk-build.cmd构建Android.so文件
- 如何将 txt 文件中的行分隔为组件C++
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- VSCode-有一个红色下划线,但程序构建和运行正确,并且出现配音错误
- 一种在C++中读取TXT配置文件的简单方法
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 如何修复此iFile以将.txt输出到控制台
- 无法打开.txt文件
- 无法使用Qt Creator在Windows中构建yaml-cpp
- 在Cmake构建CmakeList.txt中读取/解析XML文件
- CMAKE:如何在Cmakelists.txt中构建多个库
- 不同构建系统的CLion CMakeLists.txt库路径
- 如何使用cmakelists.txt链接预构建的.SO文件
- 从 txt 文件行构建类对象
- Eclipse C++在调试中未构建.txt文件