Pokud vím, jsou to knihovny, ale jaký je mezi nimi rozdíl?
Komentáře
- Související příspěvek – Jaký je ' rozdíl mezi knihovnami .so, .la a .a soubory?
Odpověď
A .a
file is a static library, while a .so
file is a shared object (dynamic) library similar to a DLL on Windows. Na této stránce najdete několik podrobných informací o rozdílech mezi těmito dvěma .
Komentáře
-
.a
lze zahrnout pouze jako součást programu během kompilace..so
' s lze " importovat " zatímco se program načítá. - co znamená .a znamená?
- @hfrmobile a znamená archiv – statická knihovna je kolekce souborů objektů vytvořených pomocí
ar
obslužného programu. Další informace zde
Odpověď
Následně je soubor .a archiv „ar“. Na rozdíl od archivu tar ukládá .o nebo objekt soubory, které umožňují jejich vyjmutí z archivu a propojení mimo jiné do programu. Pokud chcete, můžete použít ar k uložení dalších souborů.
Seznam členů souboru ar můžete získat pomocí parametru -t, například:
ar -t /usr/lib/libc.a
Soubor .so je soubor „sdíleného objektu“ a má pro linkera k dispozici mnohem více informací, takže členové mohou být co nejrychleji propojeni s programem načítání.
Například zkuste:
objdump -T /lib/libc-2.11.1.so
(nebo jakákoli verze libc.so, kterou máte v adresáři / lib.) Všimněte si, že soubor .so může také obsahovat pouze linkerový skript, který jej nasměruje k nalezení soubor jinde nebo použít něco jiného.
Zajímavé je, že soubor .so může být také plnohodnotným programem. Zkuste například spustit /lib/libc.so.6 . (Je smutné, že tato poslední část nefunguje na modernějších systémech. Ne že by to byla velká ztráta.)
Komentáře
- překlep . chcete napsat
ar -t /usr/lib/libc.a
. Ve skutečnosti se-
v tomto případě nezdá být nutné '. Také/lib/libc.so.6.
pouze vytiskne nějaký výstup. Nevím ' nevím, jestli bych to nazvalfull fledged program
. - It ' je plnohodnotný program v tom smyslu, že má hlavní symbol, který má exec najít.
- Můžete také spustit
ldd
na .so ' s a ukáže vám, jaké další knihovny používá. Static se vrátí se zprávou, že ' nejde o dynamickou knihovnu.