1

我正在尝试创建一个链接到静态库的共享库(实际上是一个 Python 模块)。这两个库都是同一个项目的一部分,并使用 cmake 构建。

现在,共享库是这样构建的:


add_library(MyLibPython SHARED ${PYTHON_WRAPPERS_SRC})
set_target_properties(MyLibPython PROPERTIES PREFIX "")
target_link_libraries(MyLibPython MyLibStatic ${LIBS})

这构建没有错误,但是当我尝试导入 Python 模块时,我得到:

导入错误:
lib/python/MyLibPython.so:未定义符号:_Zone_of_my_MyLibStatic_functions

我还有许多以类似方式构建的可执行文件(单元测​​试),它们运行良好。

我应该补充一点,这是在 Linux 上使用 gcc。

4

1 回答 1

2

检查您的链接器命令行。它是通过类似的东西-Wl,--as-needed吗?如果是这样,它可能不包括静态库所需的所有内容。

我不认为您的技术通常是可移植的。你能得到一个共享库来链接吗?我认为在某些平台上,进入共享库的所有内容都需要编译为 PIC。

无论如何,要将整个档案与 GNU ld 链接(查找man ld):

gcc -o foo foo.o bar.o baz.o -Wl,--whole-archive libfoo.a -Wl,--no-whole-archive [rest-of-linker-args]
于 2010-11-18T22:57:55.190 回答