информация о зависимостях динамического компоновщика, встроенная в архив - PullRequest
2 голосов
/ 21 февраля 2009

Динамические библиотеки хороши. В них встроена информация, которая помогает компоновщику среды выполнения определить, какие другие библиотеки необходимо загрузить конечному исполняемому файлу. Он также сообщает исполняемому файлу, какие символы будут загружены

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

Так почему же архивы не могут просто включать информацию о своих зависимостях? Я пытался сделать это. Ключом к моей идее является /usr/lib/libc.so. Это не общий объектный файл, а скрипт компоновщика.

Скрипты компоновщика дают вам большой контроль над окончательным выводом компоновщика, но все, что мне нужно, это указать зависимости, с которыми вы можете:

INPUT( -ldependency -ldependecy2 )

Вот мои вопросы.

  • Это кажется довольно простым, почему это не было сделано раньше? Я не могу быть первым человеком, который подумал об этом. Это кажется более простым и интуитивно понятным, чем pkg-config или libtool (особенно libtool ugh).
  • Я пытался встроить скрипт компоновщика в архив, он не работает. Почему бы и нет? Можно ли заставить его работать? Я подозреваю, что какое-то умное использование ranlib могло бы сработать, но это за мной.

Мое текущее решение - создать скрипт компоновщика с именем libMyLibrary.a. Содержит

INPUT( -lMyRealLibrary -ldependency1 -ldependency2 )

Я должен поставить зависимости вручную, было бы неплохо, если бы я мог, но это проблема для другого дня.

Ответы [ 2 ]

0 голосов
/ 14 марта 2009

Скрипты компоновщика этой формы поддерживаются только GNU-ld (новый компоновщик Gold ELF также имеет ограниченную поддержку). Если у вас есть какие-либо требования к переносимости, вам лучше не полагаться на поддержку сценариев компоновщика.

libtool написан специально , чтобы помочь с переносимостью в создании общих библиотек (детали которых сильно различаются между платформами).

Если вам не нужна переносимость, тогда конечно вам не нужен libtool и его сложность.

0 голосов
/ 10 марта 2009

Чтобы ответить на вторую часть вашего вопроса, ar p ARCHIVE SCRIPT будет отслеживать содержимое сценария, содержащегося в АРХИВЕ. Или ar x ARCHIVE SCRIPT, чтобы извлечь файл и затем передать его компоновщику, как ld blah blah -TSCRIPT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...