我的项目创建了一个共享对象'依赖'应该引用其他共享对象B,C,D和E.在构建项目并使用实用程序ldd
检查构建之后,我看不到对共享的引用对象B,C,D和E.但是,当我在构建中使用指令target_link_libraries(A , B , C , D , E )
时,对共享对象的引用显示在A.so
中。我的问题有两个:
target_link_libraries
是否正确?target_link_libraries
的使用是正确的,因为我正在构建一个在运行时链接的共享对象。示例:
我的Frobnigator项目取决于已构建的ContinuumTransfunctioner和Transmogrifier共享对象。我的问题是关于行target_link_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?
答案 0 :(得分:2)
是的,即使在创建 SHARED 库时也需要使用target_link_libraries
。
虽然在运行时( loading 时间)执行某些符号解析,但有些事情应该在构建时执行(联强>)。
主要的是......提供一个库列表,这些库应该加载到您的库中。此列表是"嵌入"进入库文件。 动态加载程序没有其他方法可以知道应该加载哪些库。
在链接时执行的其他事项包括: