Можно ли статически связать некоторые (но не все) библиотеки с помощью libtool?

StackOverflow https://stackoverflow.com/questions/1943834

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top