GNU/Linux >> Znalost Linux >  >> Linux

Jak fungují čísla SO (sdílených objektů)?

Binární soubory samy vědí, na které verzi sdílené knihovny jsou závislé, a konkrétně si ji vyžádají. Můžete použít ldd ukázat závislosti; moje za ls jsou:

$ ldd /bin/ls
    linux-gate.so.1 =>  (0xb784e000)
    librt.so.1 => /lib/librt.so.1 (0xb782c000)
    libacl.so.1 => /lib/libacl.so.1 (0xb7824000)
    libc.so.6 => /lib/libc.so.6 (0xb76dc000)
    libpthread.so.0 => /lib/libpthread.so.0 (0xb76c3000)
    /lib/ld-linux.so.2 (0xb784f000)
    libattr.so.1 => /lib/libattr.so.1 (0xb76bd000)

Jak vidíte, ukazuje to např. libpthread.so.0 , nejen libpthread.so .

Důvodem symbolického odkazu je linker. Když chcete odkazovat proti libpthread.so přímo, dáte gcc příznak -lpthread a přidá na lib prefix a .so přípona automaticky. Nemůžete mu přikázat, aby přidal na .so.0 přípona, takže symbolický odkaz ukazuje na nejnovější verzi lib, aby to bylo usnadněno


Čísla ve sdílených knihovnách jsou konvence používaná v Linuxu k identifikaci API knihovny. Typický formát je:

libFOO.so.MAJOR.MINOR

A jak jste si všimli obvykle, existuje symbolický odkaz z libFOO.so na libFOO.so.MAJOR.MINOR. ldconfig je zodpovědný za aktualizaci tohoto odkazu na nejnovější verzi.

Hodnota MAJOR se obvykle zvýší, když se změní rozhraní API (jsou odstraněny nové vstupní body nebo se změní parametry nebo typy). MINOR se obvykle zvyšuje pro vydání oprav chyb nebo když jsou zavedena nová rozhraní API, aniž by došlo k porušení stávajících rozhraní API.

Rozsáhlejší diskusi naleznete zde:Rozebírání sdílených knihoven


Sdílené knihovny by měly být verzovány podle následujícího schématu:

blah.so.X.Y.Z

kde

  • X =zpětně nekompatibilní vydání ABI
  • Y =zpětně kompatibilní vydání ABI
  • Z =Pouze interní změny – žádná změna rozhraní ABI

Obvykle vidíte pouze první číslici, například hello.so.1 protože první číslice je jediná věc potřebná k identifikaci "verze" knihovny, protože všechny ostatní číslice jsou zpětně kompatibilní.

ldconfig udržuje tabulku toho, jaké sdílené knihovny jsou v systému dostupné a kde existuje cesta k této knihovně. Můžete to ověřit spuštěním:

ldconfig -p

Když je balíček vytvořen pro něco jako Red Hat, sdílené knihovny vyvolávané v binárním formátu budou vyhledány a přidány jako závislosti balíčku v době sestavení RPM. Když tedy přejdete k instalaci balíčku, instalační program vyhledá, zda hello.so.1 je nainstalován v systému zaškrtnutím ldconfig .

Závislosti balíčku můžete vidět tak, že uděláte něco jako:

rpm -qpR hello.rpm

Tento systém (na rozdíl od Windows) umožňuje více verzí hello.so být nainstalován v systému a být používán různými aplikacemi současně.


Linux
  1. Jak zajistit, aby trvalé odkazy WordPress fungovaly v Nginx

  2. Jak Awk ‚!a[$0]++‘ funguje?

  3. Jak Sticky Bit funguje?

  1. Jak fungují vnitřnosti sudo?

  2. Jak zajistit, aby Uuencode fungoval?

  3. Ssh – Jak funguje Tcp-keepalive v Ssh?

  1. Jak zobrazit čísla řádků ve vi/vim?

  2. Jak inicializovat sdílenou knihovnu v Linuxu

  3. Jak zajistit, aby sdílené klíče .ssh/authorized_keys a sudo spolupracovaly?