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