Как создать статическую библиотеку, которая автоматически связывается с динамической библиотекой?

Я поддерживаю нашу собственную библиотеку инфраструктуры — давайте назовем это libcluracan, Эта библиотека должна быть статически связана, потому что она не существует на внешних компьютерах, где используется код.

Это означает, что вместо создания libcluracan.so файл с помощью компоновщика я создаю libcluracan.a файл с использованием ar команда

Теперь я пытаюсь добавить новые функции в libcluracan, но требует соединения с внешней библиотекой — в частности -lfltk, но конкретика не важна. Важно то, что я могу предположить, что внешние компьютеры имеют эту библиотеку (и любую другую общедоступную библиотеку, которая мне нужна).

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

Если бы мы использовали динамический libcluracan.so библиотека я бы просто добавил -lfltk к компоновщику и забудьте об этом — программисты будут продолжать связываться с -lcluracan и получить -lfltk автоматически.

Мне нужно найти способ сделать то же самое с нашей статической libcluracan.a библиотека.

TL; DR

Есть ли способ создать статический .a библиотека, которая автоматически связывается с другой динамикой .so библиотека когда используется?

1

Решение

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

То есть в самом деле большая проблема. Ваши внутренние программисты должны использовать make (или аналогичная автоматизированная система сборки), и изменение будет тривиальным.

Нет никакого способа достичь того, что вы хотите в произвольной системе UNIX.

Если вы используете набор инструментов GNU, и в частности GNU-ld или goldЗатем вы можете достичь того, что вы хотите, связавшись с libcluracan.so, где libcluracan.so это не общая библиотека, а скрипт компоновщика, который выглядит следующим образом:

GROUP ( libcluracan.a libfltk.so )
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]