Нужны ли мне статические библиотеки для статического связывания?

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

Вопрос

На «С», Linux,

Нужны ли мне статические библиотеки для статического связывания или достаточно общих?Если нет, то почему?(Разве они не содержат одни и те же данные?)

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

Решение

Да, вам нужны статические библиотеки для создания статически связанного исполняемого файла.

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

Динамические библиотеки уже связаны.Это означает, что некоторая информация, например о переездах, уже исправлена ​​и выброшена.

Кроме того, динамические библиотеки должны быть скомпилированы как позиционно-независимый код.Это не является ограничением для статических библиотек и приводит к значительной разнице в производительности на некоторых распространенных платформах (например, x86).

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

Другие советы

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

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

Все библиотеки, на которые вы ссылаетесь в статически связанной программе, должны быть статическими. Хотя динамическая (libfoo.so) и статическая (libfoo.a) библиотеки имеют одинаковые функции, они представляют собой файлы разных форматов, поэтому вам необходим соответствующий тип для вашей программы.

Еще один вариант - Эрмин ( http://magicErmine.com ) Это как стабилизатор, но может справиться с рандомизацией памяти.

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