在cmake中构建共享对象时指定目标链接库
我的项目创建了一个“依赖”的共享对象a,它应该引用其他共享对象B、C、D和E。在构建项目并使用实用工具在cmake中构建共享对象时指定目标链接库,cmake,Cmake,我的项目创建了一个“依赖”的共享对象a,它应该引用其他共享对象B、C、D和E。在构建项目并使用实用工具ldd检查构建后,我看不到对共享对象B、C、D和E的引用。但是,当我使用指令target\u link\u库(a、B、C、D、E)时在我的构建中,对共享对象的引用出现在A.so中。我的问题有两个: 以这种方式使用target\u link\u库是否正确 如果是这样,考虑到我正在构建一个运行时链接所在的共享对象,为什么使用target\u link\u库是正确的 示例: 我的Frobnigato
ldd
检查构建后,我看不到对共享对象B、C、D和E的引用。但是,当我使用指令target\u link\u库(a、B、C、D、E)时
在我的构建中,对共享对象的引用出现在A.so
中。我的问题有两个:
target\u link\u库是否正确
target\u link\u库
是正确的示例: 我的Frobnigator项目依赖于已经构建的ContinuumTransfunction和Transmogrifier共享对象。我的问题是关于行
target\u link\u libraries(Frobnigator${libraries})
是否必要
cmake_minimum_required(VERSION 3.0)
set(Libraries
ContinuumTransfunctioner
Transmogrifier
)
set(SourceFiles
Wrapper.cpp
Logger.cpp
)
add_library(Frobnigator SHARED ${SourceFiles})
add_library(FrobnigatorStatic STATIC ${SourceFiles})
set_target_properties(FrobnigatorStatic PROPERTIES OUTPUT_NAME Frobnigator)
#target_link_libraries(Frobnigator ${Libraries}) # Do I need this?
是的,即使在创建共享库时,也需要使用
目标链接库
虽然一些符号解析是在运行时(加载时)执行的,但有些事情应该在构建时执行(链接)
主要是。。。提供应随库一起加载的库的列表。此列表“嵌入”到库文件中。dynamic loader没有其他方法可以知道应该使用您的库加载哪些其他库
在链路时间执行的其他事项包括:
- 检查库所需的所有符号是否在其他库中实际可用
运行时链接的共享对象
-链接在构建时执行。在运行时(加载时),您只解析链接<“依赖”的共享对象A应该引用其他共享对象B、C、D和E。-这是什么意思?这里的“视情况而定”是什么意思?也许提供一些代码会让事情变得更清楚…@Andre,但我是在Linux上构建的。我是否需要target\u link\u libraries
来指定A所依赖的共享对象?这对我来说(还)毫无意义。我只是建议你使用CGube,一个跨平台的工具,CMake(和你)也必须考虑到你的CMAKLIST应该在Windows上没有问题。然后目标链接库是绝对必要的。@Tsyvarev请参阅我的编辑。关于在构建时进行链接,您提出了一个很好的观点。