Я поддерживаю нашу собственную библиотеку инфраструктуры — давайте назовем это libcluracan
, Эта библиотека должна быть статически связана, потому что она не существует на внешних компьютерах, где используется код.
Это означает, что вместо создания libcluracan.so
файл с помощью компоновщика я создаю libcluracan.a
файл с использованием ar
команда
Теперь я пытаюсь добавить новые функции в libcluracan
, но требует соединения с внешней библиотекой — в частности -lfltk
, но конкретика не важна. Важно то, что я могу предположить, что внешние компьютеры имеют эту библиотеку (и любую другую общедоступную библиотеку, которая мне нужна).
Самая большая проблема в том, что я не могу изменить способ, которым программисты компилируют (ну, связывают) свой код.
Если бы мы использовали динамический libcluracan.so
библиотека я бы просто добавил -lfltk
к компоновщику и забудьте об этом — программисты будут продолжать связываться с -lcluracan
и получить -lfltk
автоматически.
Мне нужно найти способ сделать то же самое с нашей статической libcluracan.a
библиотека.
TL; DR
Есть ли способ создать статический .a
библиотека, которая автоматически связывается с другой динамикой .so
библиотека когда используется?
Самая большая проблема в том, что я не могу изменить способ, которым программисты компилируют (ну, связывают) свой код.
То есть в самом деле большая проблема. Ваши внутренние программисты должны использовать make
(или аналогичная автоматизированная система сборки), и изменение будет тривиальным.
Нет никакого способа достичь того, что вы хотите в произвольной системе UNIX.
Если вы используете набор инструментов GNU, и в частности GNU-ld или gold
Затем вы можете достичь того, что вы хотите, связавшись с libcluracan.so
, где libcluracan.so
это не общая библиотека, а скрипт компоновщика, который выглядит следующим образом:
GROUP ( libcluracan.a libfltk.so )
Других решений пока нет …