CMake: общая библиотека, которая использует статическую библиотеку - PullRequest
1 голос
/ 19 ноября 2010

Я пытаюсь создать разделяемую библиотеку (на самом деле модуль Python), которая связывается со статической библиотекой.Обе библиотеки являются частью одного и того же проекта и построены с использованием cmake.

Теперь общая библиотека создается следующим образом:


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

Эта сборка выполняется без ошибок, но при попытке импортироватьМодуль Python, я получаю:

ImportError:
lib/python/MyLibPython.so: undefined symbol: _Zone_of_my_MyLibStatic_functions

У меня также есть несколько исполняемых файлов (модульных тестов), которые построены аналогичным образом, и они отлично работают.использует gcc в Linux.

1 Ответ

2 голосов
/ 19 ноября 2010

Проверьте командную строку вашего компоновщика.Это что-то вроде -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]
...