Действительно ли возможно связать некоторых — но не все — библиотеки статически с libtool?

Я работаю над проектом, который разрабатывается с помощью autoconf, автосделайте и libtool. Проект распределяется и в двоичном файле и в исходной форме.

На Linux, по умолчанию ссылки на сценарии сборки на все библиотеки динамично. Это имеет смысл, так как пользователи Linux могут полагаться на диспетчер пакетов своего распределения для обработки зависимостей.

В Windows, по умолчанию ссылки на сценарии сборки на все библиотеки статически с помощью libtool’s -all-static опция. Это имеет смысл, так как ни одной из зависимостей не предоставляют Windows, и полезно смочь распределить единственный двоичный файл, содержащий все зависимости вместо того, чтобы небрежно обращаться с распределительными тоннами DLLs.

На OSX некоторые зависимости обеспечиваются ОС, и некоторые не. Поэтому было бы полезно связаться с обеспеченными ОС библиотеками динамично и с другими библиотеками статически. К сожалению, бескомпромиссный libtool’s -all-static опция не полезна здесь.

Существует ли хороший способ заставить libtool связываться с некоторыми библиотеками статически, но не всеми?

Примечание: Я понимаю, что мог тщательно скомпилировать зависимости так, чтобы только статические сборки были доступны. Однако я быть бы, система сборки для моего проекта была устойчива в общем падеже статических и динамических сборок зависимостей, являющихся доступным.

Примечание: Конечно, я не обеспокоен действительно низкоуровневыми зависимостями как библиотеки времени выполнения C/C++, которые всегда связываются динамично на всех трех из вышеупомянутых платформ.

5
задан Vadim Kotov 15 November 2017 в 10:34
поделиться

1 ответ

После некоторых исследований я ответил на свой вопрос.

Если у вас установлена статическая и динамическая сборка библиотеки, и вы связываетесь с этой библиотекой с помощью параметра -l, то либтул связывается по предпочтению динамической сборки. Оно связывается со статической сборкой, если динамической сборки нет, или если вы передали опции -static или -all-static.

libtool можно заставить линковать со статической библиотекой, указав полный путь к этой библиотеке вместо опции -l.

.
7
ответ дан 14 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: