Что такое файлы .a и .so?

428

В настоящее время я пытаюсь перенести приложение C на AIX, и я запутался. Что такое файлы .a и .so и как они используются при сборке / запуске приложения?

Dunc
источник
116
один из них - библиотека archive, а другой - sненавистный oобъект
Шиплу Мокаддим
Возможный дубликат В чем разница между библиотечными файлами .so, .la и .a? ,
Питер Мортенсен

Ответы:

484

Архивные библиотеки (.a) статически связаны, т.е. когда вы компилируете свою программу с опцией -c в gcc. Итак, если в библиотеке есть какие-либо изменения, вам нужно снова скомпилировать и собрать код.

Преимущество .so (общего объекта) перед .a библиотекой заключается в том, что они связаны во время выполнения, т.е. после создания опции .o file -o в gcc. Итак, если есть какие-либо изменения в .so файле, вам не нужно перекомпилировать основную программу. Но убедитесь, что ваша основная программа связана с новым .so файлом с помощью команды ln.

Это поможет вам создать файлы .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Надеюсь это поможет.

лиственный
источник
2
это относится к pic(позиционно-независимому коду)?
Трансанг
213

.a статические библиотеки. Если вы используете код, хранящийся внутри них, он берется из них и встраивается в ваш собственный двоичный файл. В Visual Studio это будут файлы .lib.

.so динамические библиотеки. Если вы используете код, хранящийся внутри них, он не будет взят и встроен в ваш собственный двоичный файл. Вместо этого на него просто ссылаются, поэтому двоичный файл будет зависеть от них, и код из файла будет добавлен / загружен во время выполнения. В Visual Studio / Windows это были бы файлы .dll (с небольшими .lib файлами, содержащими информацию о ссылках).

Марио
источник
Привет, есть ли возможность декомпилировать .so файл в коде c / c ++.?
Jishant
@Ancee: посмотрите на этот вопрос: stackoverflow.com/questions/205059/is-there-ac-decompiler
Пол Винц
Небольшой .libфайл для .dllназывается библиотека импорта.
Денежно-ориентированный программист
13

Файлы .a обычно являются библиотеками, которые статически связаны (или, точнее, архивами), а
.so являются динамически связанными библиотеками.

Для создания порта вам понадобится исходный код, который был скомпилирован для их создания, или эквивалентные файлы на вашем компьютере AIX.

gbulmer
источник
Как мне создать приложение для использования файлов .so?
Дунк
Есть много отличных ссылок для создания обоих типов библиотек и ссылки на них в Интернете. Google твой друг.
Дэвид Пойнтер
@Dunc - Есть несколько способов. У вас есть make-файл? Обычно команда, которая собирает всю программу (и, следовательно, вызывает компоновщик), указывает места для поиска файлов библиотеки с помощью -L / dir / dir1 /.../, а также может явно указывать библиотеки с помощью -lname. Вы обнаружите, что фактическое имя - libname.a или libname.so. Затем компоновщик может выяснить, что делать, если это достаточно нормальная программа. Но у вас все еще есть проблема создания или поиска файла .so. У вас есть исходный код для его сборки или библиотека AIX?
gbulmer
10

Они используются на этапе связывания. .aфайлы статически связаны, а .soфайлы являются своего рода связанными, поэтому библиотека необходима при каждом запуске exe.

Вы можете найти, где они хранятся, просмотрев любой из каталогов lib ... /usr/libи /libу них есть большинство из них, а также есть LIBRARY_PATHпеременная окружения.

Matt
источник
0

Википедия - достойный источник этой информации.

Чтобы узнать о файлах статической библиотеки, таких как .a, прочитайте Static libarary

Чтобы узнать о файлах разделяемой библиотеки, таких как .so, прочитайте Library_ (computing) #Shared_libraries На этой странице также есть полезная информация в разделе именования файлов .

user3731622
источник