链接到链接到另一个共享库的共享库会在退出时出错

Linking to a shared library that links to another shared library segfaults on exit

本文关键字:链接 共享 出错 退出 另一个      更新时间:2023-10-16

不幸的是,我无法创建一个最小的示例,但情况如下。我有一个链接到另一个库的库,像这样:

add_library(MainLib MainLib.cpp)
add_library(ChildLib ChildLib.cpp)
target_link_libraries(ChildLib MainLib)

我可以这样做(不使用ChildLib,而是直接将ChildLib.cpp编译到可执行文件中):

ADD_EXECUTABLE(TestNoLink TestNoLink.cpp ChildLib.cpp)
TARGET_LINK_LIBRARIES(TestNoLink MainLib)

一切都可以毫无问题地编译、链接和运行。

但是,如果我这样做(现在使用ChildLib):

ADD_EXECUTABLE(TestChildLink TestChildLink.cpp)
TARGET_LINK_LIBRARIES(TestChildLink ChildLib) # no need to link to MainLib here because ChildLib already links to MainLib

所有的东西仍然可以编译和链接,它实际上也运行得很好,但在它运行完之后,它就会出现segfault。

我是否应该在这里寻找一些概念来找出是什么导致了这种情况?

问题显然是我链接到了同一个库(Boost库)的共享AND静态版本。链接器不应该注意到这一点并产生错误吗?