Каково различие между.a и .so файлом?

Другой способ освежевать эту кошку состоит в том, чтобы использовать stdbuf программа, которая является частью Coreutils GNU (FreeBSD также имеет свой собственный).

stdbuf -i0 -o0 -e0 command

Это выключает буферизацию полностью для входа, вывода и ошибки. Для некоторых приложений буферизация строки может более подойти по причинам производительности:

stdbuf -oL -eL command

Обратите внимание, что это только работает на stdio буферизация (printf(), fputs()...) для динамично связанных приложений, и только если то приложение иначе не корректирует буферизацию своих стандартных потоков отдельно, хотя это должно покрыть большинство приложений.

68
15.05.2011, 01:35
2 ответа

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

55
27.01.2020, 19:31
  • 1
    .a может только быть включен как часть программы во время компиляции. .soможет быть "импортирован" в то время как загрузки программы. –  LawrenceC 15.05.2011, 02:39
  • 2
    , что обозначает.a? –  hfrmobile 29.11.2016, 14:17
  • 3
    @hfrmobile стенды для архива - статическая библиотека является набором объектных файлов, созданных с помощью ar утилита. Больше информации здесь –  ajk 29.11.2016, 18:19

Как следование на.a файл является архивом "площади". Мало чем отличаясь от архива tar, это хранит.o или объектные файлы, позволяя им быть вытащенным архива и связанным в программу, среди прочего. Вы могли использовать площадь, чтобы хранить другие файлы, если бы Вы хотели.

Можно получить список членов файла площади с-t параметром, например:

ar -t /usr/lib/libc.a

A. таким образом, файл является файлом "общего объекта" и имеет намного больше информации, доступной компоновщику так, чтобы участники могли быть связаны в с программой загрузки максимально быстро.

Например, попытка:

objdump -T /lib/libc-2.11.1.so

(или безотносительно версии libc.so Вы имеете в своем / каталоге lib.) Отмечают, что .so файл мог также просто содержать сценарий компоновщика, направляющий его, чтобы найти файл в другом месте или использовать что-то еще.

Интересно, .so файл может также быть абсолютной программой. Например, попытка выполнения/lib/libc.so.6. (К сожалению, эта последняя часть, кажется, не работает над более современными системами. Не то, чтобы это - большая потеря.)

28
27.01.2020, 19:31
  • 1
    . Вы означаете писать ar -t /usr/lib/libc.a. На самом деле - кажется, не необходим в этом случае. Также /lib/libc.so.6. просто печать некоторый вывод. Я не знаю, назвал ли я это a full fledged program. –  Faheem Mitha 15.05.2011, 11:09
  • 2
    Это - абсолютная программа в том смысле, что это имеет основной символ для должностного лица для нахождения. –  Hack Saw 16.05.2011, 19:05
  • 3
    Можно также работать ldd на .so's, и это покажет Вам, что другие библиотеки это использует. Static возвратится с сообщением, заявляя, что это не динамическая библиотека. –  Marcin 17.05.2011, 04:06

Теги

Похожие вопросы