GNU/Linux >> Znalost Linux >  >> Linux

Nemohu najít existující knihovnu

V Ubuntu si můžete nainstalovat libtool který automaticky řeší knihovny.

$ sudo apt-get install libtool

To vyřešilo problém s ltdl pro mě, který byl nainstalován jako libltdl.so.7 a nebyl nalezen jako jednoduše -lltdl ve výrobě.


Problém je v tom, že linker hledá libmagic.so ale máte pouze libmagic.so.1

Rychlý hack je symbolický odkaz libmagic.so.1libmagic.so


Konvencí Debianu je oddělovat sdílené knihovny do jejich runtime komponent (libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0 ) a jejich vývojové komponenty (libmagic-dev: /usr/lib/libmagic.so → … ).

Protože soname knihovny je libmagic.so.1 , to je řetězec, který se vloží do spustitelného souboru, takže je to soubor, který se načte při spuštění spustitelného souboru.

Protože je však knihovna specifikována jako -lmagic k linkeru hledá libmagic.so , což je důvod, proč je potřebný pro vývoj.

Podrobnosti o tom, jak to všechno funguje na Linuxu, najdete v Diego E. Pettenò:Linkers and names.

Stručně řečeno, měli byste apt-get install libmagic-dev . Tím získáte nejen libmagic.so ale také další soubory potřebné pro kompilaci jako /usr/include/magic.h .


Jak právě formuloval grepsedawk, odpověď leží v -l možnost g++ , voláním ld . Pokud se podíváte na manuálovou stránku tohoto příkazu, můžete buď:

  • g++ -l:libmagic.so.1 [...]
  • nebo:g++ -lmagic [...] , pokud máte v cestě libs symbolický odkaz s názvem libmagic.so

Linux
  1. Jak opravit chybu konfigurace:nelze najít adresář maker ‚m4‘ [Vyřešeno]

  2. Nelze najít platnou základní adresu URL:Chyba YumRepo [Vyřešeno]

  3. chyba konfigurace phpize:nelze najít zdroje (config.m4)

  1. Chyba Nelze najít OpenSSL [PHP Extension mysqlnd]

  2. Nelze najít pspell – Opravit chybu konfigurace PHP

  3. Nelze najít chybu knihovny libcrypto

  1. Normálně nelze nainstalovat 32bitový Gstreamer-ffmpeg, knihovna nemůže najít jiné 32bitové knihovny?

  2. docker - nemůže najít přihlašovací údaje aws v kontejneru, ačkoli existují

  3. Zjistěte, zda je knihovna v cestě