Dans Ubuntu, vous pouvez installer libtool
qui résout automatiquement les bibliothèques.
$ sudo apt-get install libtool
Cela a résolu un problème avec ltdl
pour moi, qui avait été installé en tant que libltdl.so.7
et n'a pas été trouvé aussi simplement -lltdl
en préparation.
Le problème est que l'éditeur de liens recherche libmagic.so
mais vous n'avez que libmagic.so.1
Un hack rapide consiste à créer un lien symbolique libmagic.so.1
à libmagic.so
C'est la convention Debian de séparer les bibliothèques partagées dans leurs composants d'exécution (libmagic1: /usr/lib/libmagic.so.1 → libmagic.so.1.0.0
) et leurs composants de développement (libmagic-dev: /usr/lib/libmagic.so → …
).
Parce que le soname de la bibliothèque est libmagic.so.1
, c'est la chaîne qui est intégrée dans l'exécutable, c'est donc le fichier qui est chargé lorsque l'exécutable est exécuté.
Cependant, comme la bibliothèque est spécifiée en tant que -lmagic
à l'éditeur de liens, il recherche libmagic.so
, c'est pourquoi il est nécessaire pour le développement.
Voir Diego E. Pettenò :Linkers and names pour plus de détails sur le fonctionnement de tout cela sous Linux.
En bref, vous devriez apt-get install libmagic-dev
. Cela ne vous donnera pas seulement libmagic.so
mais aussi d'autres fichiers nécessaires à la compilation comme /usr/include/magic.h
.
Comme vient de le formuler grepsedawk, la réponse réside dans le -l
possibilité de g++
, en appelant le ld
. Si vous regardez la page de manuel de cette commande, vous pouvez soit :
g++ -l:libmagic.so.1 [...]
- ou :
g++ -lmagic [...]
, si vous avez un lien symbolique nommé libmagic.so dans votre chemin libs