In Ubuntu können Sie libtool
installieren die die Bibliotheken automatisch auflöst.
$ sudo apt-get install libtool
Dadurch wurde ein Problem mit ltdl
behoben für mich, die als libltdl.so.7
installiert war und wurde nicht einfach als -lltdl
gefunden in der Mache.
Das Problem ist, dass der Linker nach libmagic.so
sucht aber Sie haben nur libmagic.so.1
Ein schneller Hack ist das Symlinken von libmagic.so.1
bis libmagic.so
Es ist Debian-Konvention, gemeinsam genutzte Bibliotheken in ihre Laufzeitkomponenten aufzuteilen (libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0
) und ihre Entwicklungskomponenten (libmagic-dev: /usr/lib/libmagic.so → …
).
Weil der Soname der Bibliothek libmagic.so.1
ist , das ist die Zeichenfolge, die in die ausführbare Datei eingebettet wird, also die Datei, die geladen wird, wenn die ausführbare Datei ausgeführt wird.
Da die Bibliothek jedoch als -lmagic
angegeben ist zum Linker sucht er nach libmagic.so
, weshalb es für die Entwicklung benötigt wird.
Siehe Diego E. Pettenò:Linker und Namen für Details darüber, wie das alles unter Linux funktioniert.
Kurz gesagt, Sie sollten apt-get install libmagic-dev
. Dadurch erhalten Sie nicht nur libmagic.so
aber auch andere zum Kompilieren notwendige Dateien wie /usr/include/magic.h
.
Wie gerade von grepsedawk formuliert, liegt die Antwort in der -l
Option von g++
, Aufruf von ld
. Wenn Sie sich die Manpage dieses Befehls ansehen, können Sie entweder:
g++ -l:libmagic.so.1 [...]
- oder:
g++ -lmagic [...]
, wenn Sie einen symbolischen Link namens libmagic.so in Ihrem libs-Pfad haben