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.1
až libmagic.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