Смешивание статических и общих библиотек
У меня есть проект, где у меня есть одна статическая библиотека libhelper.a
и другой с моей фактической общей библиотекой объектов, libtestlib.so
, Моя цель - связать libhelper.a
в libtestlib.so
, Это возможно в Linux/BSD? Когда я попробовал и создал тестовую программу, я получил следующие ошибки:
./prog1:/usr/local/lib/libtestlib.so.1.0: неопределенный символ ''
Я предполагаю, что это происходит потому, что libhelper.a не был скомпилирован с -fPIC
в то время как libtestlib.so
было. Как правильно создавать программы, использующие разделяемые библиотеки, которые также зависят от статических библиотек?
Спасибо!
1 ответ
Моя цель - связать libhelper.a с libtestlib.so. Это возможно в Linux?
Конечно. Это должно сделать:
gcc -shared -fPIC -o libtestlib.so $(OBJS) \
-Wl,--whole-archive -lhelper -Wl,--no-whole-archive
libhelper.a не был скомпилирован с -fPIC
Лучше пересобрать libhelper.a с -fPIC
, Если это невозможно, приведенная выше команда все равно будет работать на Linux/ix86
но не на например Linux/x86_64
,
Как правильно создавать программы, использующие разделяемые библиотеки, которые также зависят от статических библиотек?
Если вы включите libhelper.a
в libtestlib.so
как указано выше, то просто:
gcc main.c -ltestlib
это все, что тебе нужно. Если вы настаиваете на связи с libhelper.a
, то вы должны сообщить конечному пользователю, что он должен связать, например, с
gcc main.c -ltestlib -lhelper
Нет способа указать, что libtestlib.so
зависит от libhelper.a
,