.aФайл является статической библиотекой, а .soфайл является общим объект (динамическая) библиотека похожа на DLL на Windows. На этой странице есть подробная информация о различиях между ними .
.aможет быть включен только как часть программы во время компиляции. .soможно импортировать во время загрузки программы.
LawrenceC
2
что означает .a?
hfrmobile
2
@hfrmobile A обозначает архив - статическая библиотека представляет собой набор объектных файлов, созданных с помощью arутилиты. Больше информации здесь
ajk
28
Как следствие, файл .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.
Фахим Митха
1
Это полноценная программа в том смысле, что в ней есть главный символ для поиска exec.
Hack Saw
2
Вы также можете запустить ldd.so, и он покажет вам, какие другие библиотеки он использует. Static вернется с сообщением о том, что это не динамическая библиотека.
Ответы:
.a
Файл является статической библиотекой, а.so
файл является общим объект (динамическая) библиотека похожа на DLL на Windows. На этой странице есть подробная информация о различиях между ними .источник
.a
может быть включен только как часть программы во время компиляции..so
можно импортировать во время загрузки программы.ar
утилиты. Больше информации здесьКак следствие, файл .a является архивом "ar". В отличие от архива tar, он хранит .o или объектные файлы, что позволяет извлекать их из архива и связывать в программе, среди прочего. Вы можете использовать ar для хранения других файлов, если хотите.
Вы можете получить список членов ar-файла с параметром -t, например:
Файл .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 вернется с сообщением о том, что это не динамическая библиотека.