Что содержит скомпилированная статическая библиотека GCC?
-
05-07-2019 - |
Вопрос
Мое приложение ссылается на libsamplerate.a. Я делаю это, чтобы облегчить распространение финального двоичного файла.
Я обеспокоен тем, что, возможно, код в файле .a зависит от некоторых других библиотек, которые мне также нужно будет распространять.
Но если это не так, я волнуюсь, я слишком сильно раздуваю свое приложение, включая несколько копий, например. Libc.
Что именно будет внутри libsamplerate.a? Просто байт-код libsamperate? Или больше?
Решение
Статическая библиотека - это просто набор объектных файлов. Когда вы компилируете программу со статической библиотекой, объектный код для функций, используемых вашей программой, копируется из библиотеки в ваш исполняемый файл. Связывание со статической библиотекой не приведет к включению каких-либо функций вне этой библиотеки в ваш код.
Другие советы
Файл .a - это просто набор файлов .o. Вы можете продемонстрировать это с помощью инструмента ar
.
Например, для отображения содержимого вашей библиотеки:
ar -t libsamplerate.a
Чтобы создать файл .a с нуля:
ar -r tim.a *.txt
Просто объектный код для libsamplerate. Статическое связывание с одной библиотекой не делает статически все библиотеки связанными; это было бы плохо.