it-swarm-ru.tech

В чем разница между .a и .so файлом?

Насколько я понимаю, это библиотеки, но в чем разница между ними?

70
Erik B

A .a файл является статической библиотекой, а .so файл - это динамическая библиотека общего объекта, похожая на DLL в Windows. Есть некоторая подробная информация о различиях между ними в эта страница.

55
ajk

Как следствие, файл .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. (К сожалению, эта последняя часть, похоже, не работает на более современных системах. Не то, чтобы это была большая потеря.)

29
Hack Saw