Ответы:
.a
Файл является статической библиотекой, а .so
файл является общим объект (динамическая) библиотека похожа на DLL на Windows. На этой странице есть подробная информация о различиях между ними .
.a
может быть включен только как часть программы во время компиляции. .so
можно импортировать во время загрузки программы.
ar
утилиты. Больше информации здесь
Как следствие, файл .a является архивом "ar". В отличие от архива tar, он хранит .o или объектные файлы, что позволяет извлекать их из архива и связывать в программе, среди прочего. Вы можете использовать ar для хранения других файлов, если хотите.
Вы можете получить список членов ar-файла с параметром -t, например:
ar -t /usr/lib/libc.a
Файл .so является файлом «общего объекта» и содержит гораздо больше информации, доступной для компоновщика, чтобы участники могли быть связаны с загружаемой программой как можно быстрее.
Например, попробуйте:
objdump -T /lib/libc-2.11.1.so
(или какую-либо версию libc.so, которая находится в вашем каталоге / lib.) Обратите внимание, что файл .so также может просто содержать скрипт компоновщика, указывающий ему найти файл в другом месте, или использовать что-то еще.
Интересно, что файл .so также может быть полноценной программой. Например, попробуйте запустить /lib/libc.so.6 . (К сожалению, эта последняя часть, похоже, не работает на более современных системах. Не то, чтобы это была большая потеря.)
ar -t /usr/lib/libc.a
. На самом деле -
в этом случае нет необходимости. Также /lib/libc.so.6.
просто печатает некоторые выходные данные. Я не знаю, назову ли я это full fledged program
.
ldd
.so, и он покажет вам, какие другие библиотеки он использует. Static вернется с сообщением о том, что это не динамическая библиотека.