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”
- Cas où le blocage de recv () renvoie moins que les octets demandés
- appel système getrandom en C introuvable
- Comment obtenir une liste des sockets ouverts sous Linux en utilisant C?
- Quelle est cette syntaxe C (utilisée dans Linux drivers / net / bonding / bond_main.c)?
- Comment puis-je obtenir plusieurs appels à sem_open en C?
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):
libid3*
dans un répertoire répertorié dans /etc/ld.so.conf
(ou /lib
ou /usr/lib
) libid3*
dans un répertoire répertorié dans /etc/ld.so.conf
(ou /lib
ou /usr/lib
) (par défaut) libid3*
à /etc/ld.so.conf
LD_LIBRARY_PATH=/directory/path/to/libid3*
avant d’exécuter votre exécutable id3v2. 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.