2012-03-21 3 views
296

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

+80

one is library 'a'rchive и другие' s'hared 'o'bject –

+0

Возможный дубликат * [В чем разница между .so, .la и .a библиотечными файлами?] (Https: // stackoverflow. ком/вопросы/12237282/Что-разностное-между-так-ла-а-а-библиотека-файлы). –

ответ

324

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

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

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

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

+25

+1 для ресурсов, которые явно нужны OP – swasheck

+0

Прямо сейчас (см. Комментарий) ссылка, кажется, сломана. – ben

+0

@ben lol, просто пришел к этому вопросу тоже, и теперь кажется, что работает:> –

129

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

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

+11

На мой взгляд, это объясняет это даже лучше, чем принятый ответ. Благодаря! – Petzku

+0

Привет, есть ли возможность декомпилировать файл .so в код c/C++.? – Ancee

10

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

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

+0

Как мне создать приложение для использования файлов .so? – Dunc

+0

Существует множество отличных ссылок для создания библиотек обоих типов и ссылок на них в Интернете. Google - ваш друг. –

+0

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

7

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

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

1

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

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

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

Смежные вопросы