Моя цель - связать 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
.