Le programme Linux ne peut pas trouver la bibliothèque partagée au moment de l’exécution

J’essaie de comstackr un programme linux, id3v2, et il dit qu’il est impossible de trouver la bibliothèque appropriée:

id3v2: error while loading shared libraries: libid3-3.8.so.3: cannot open shared object file: No such file or directory 

Je suppose que c’est la partie qui attire la bibliothèque lidid3?

Le fichier existe, cependant, ce qu’il recherche est en fait un lien symbolique vers:

“ibid3-3.8.so.3.0.0”

Je me demande si c’est un problème de ne pas pouvoir suivre les liens symboliques? Je pourrais peut-être le modifier manuellement pour rechercher 0.0 si je savais où je voulais le changer.

Je suis heureux de clarifier tous les détails.

Il semble que les inclus soient réalisés de la manière suivante:

 id3v2: convert.o list.o id3v2.o genre.o ${CXX} ${LDFLAGS} -pedantic -Wall -g -o $@ $^ -lz -lid3 

J’ai été en mesure d’utiliser les conseils de Simon pour comprendre qu’il y avait plusieurs endroits où l’on pouvait s’attendre à une bibliothèque. Je crée un lien symbolique où le programme était lié au fichier ACTUAL.

Merci Simon!

Les liens symboliques sur les bibliothèques fonctionnent bien, à condition que la cible finale à laquelle ils se trouvent existe et soit accessible.

Vous avez créé un exécutable lié de manière dynamic, qui souhaite être lié à libid3-3.8.so.3 au moment de l’exécution. Cela a probablement été lié pendant la phase de construction avec quelque chose comme -L/path/to/libid3/directory -lid3 .

Vous avez quelques options pour rendre libid3 disponible, par ordre de préférence généralement décroissant (puisque vous n’avez pas mentionné l’emplacement du fichier, je ne peux être que général):

  • Créez un lien symbolique vers libid3* dans un répertoire répertorié dans /etc/ld.so.conf (ou /lib ou /usr/lib )
  • Copiez libid3* dans un répertoire répertorié dans /etc/ld.so.conf (ou /lib ou /usr/lib ) (par défaut)
  • Ajoutez le répertoire contenant libid3* à /etc/ld.so.conf
  • Définissez LD_LIBRARY_PATH=/directory/path/to/libid3* avant d’exécuter votre exécutable id3v2.
  • Recomstackz id3v2 manière statique. (Cela fonctionnera, mais ne vous embêtez pas.)

Après l’un des trois premiers, ldconfig pour que le cache de l’éditeur de liens soit mis à jour. (Vous pouvez alors exécuter ldconfig -v pour vérifier qu’il peut être résolu.)

Notez que ce ne sont pas des étapes, elles sont des options. Il vous suffit d’en faire 1.

Content que tu aies mis à jour le titre. #include directives #include n’ont rien à voir avec la liaison.

J’ai eu la même erreur que vous, et après avoir lu les solutions mentionnées ici, j’ai résolu le problème (sur Ubuntu 8) avec:

 sudo ln -s /usr/local/lib/libid3-3.8.so.3 /usr/lib/libid3-3.8.so.3 

Ceci a résolu le problème Ajoutez simplement / usr / local / lib à /etc/ld.so.conf (à moins que ce ne soit déjà là, mais seulement une fois), puis lancez ldconfig.