gpt4 book ai didi

c++ - 将动态库链接到静态库,静态库链接到其他静态库

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:46 27 4
gpt4 key购买 nike

在我的 C++ 应用程序中,我有一个静态库 (libCOMMON.a),它链接到增强库:system、filsystem、timer 和 chrono。

我正在使用 CMake,下面是我如何创建和链接 libCOMMON.a:

ADD_LIBRARY(COMMON ${COMMON_SRCS})
target_link_libraries(COMMON
${BOOST_LIB_DIR}/libboost_filesystem.a
${BOOST_LIB_DIR}/libboost_system.a
${BOOST_LIB_DIR}/libboost_timer.a
${BOOST_LIB_DIR}/libboost_chrono.a
)

我也有链接到 libCOMMON.a 的此应用程序的插件。插件被构建为动态库。一切都编译正常(使用 gcc),但是当我启动应用程序时,无法加载插件,因为无法解析与 boost 相关的动态库中的某些符号。

解决方案是将每个插件链接到 boost。有没有更好的办法 ?我认为如果将 boost 库静态链接到 libCOMMON.a,那么将插件链接到 libCOMMON.a 就足够了。

谁能解释一下发生了什么?

谢谢

最佳答案

我认为问题是默认情况下,boost 库是作为动态库构建的。即使“.a”表明它们是作为静态库构建的,boost 的 lib 文件夹也包含一个“.so”库,每个“.a”。这意味着 libCOMMON.a 动态链接到增强库。因此,静态链接到 libCOMMON.a 的插件也必须动态链接到 boost 库。更好的解决方案是将 boost 库构建为静态库。

关于c++ - 将动态库链接到静态库,静态库链接到其他静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10432968/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com