Ответы:
.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 вернется с сообщением о том, что это не динамическая библиотека.