3 votes

Liaison (ou installation et liaison correcte) de la bibliothèque jpeg-8d

J'ai besoin de capacités de manipulation de JPEG dans mon projet, j'ai donc décidé d'utiliser la bibliothèque jpeg-8d, après avoir téléchargé les paquets, j'ai fait les choses habituelles. ./configure; make and make install . make test ne renvoie aucune erreur et aucun problème n'a été signalé pendant tout le processus mais lorsque j'ai ouvert example.c dans Code Blocks 10.05 la compilation a échoué. J'ai "googlé" quelques solutions et j'ai ajouté

#ifdef __cplusplus
extern "C" {
#endif
...
#ifdef __cplusplus
}
#endif

Sur jpeglib.h recompilé, puis ajouté ces lignes à la section de liaison des blocs de code : /usr/local/lib/libjpeg.a /usr/local/lib/libjpeg.so J'ai également ajouté les répertoires correspondants dans la section des répertoires. mais le compilateur ne parvient toujours pas à compiler example.c, voici quelques-unes des erreurs :

> /home/raff/CodeBlocks/jpeg-8d/example.c|116|warning: incompatible implicit declaration of built-in function ‘exit’|
> example.c|| undefined reference to 'image_width'
> example.c|| undefined reference to 'image_height'

Si quelqu'un a réussi à installer et à utiliser la bibliothèque jpeg, veuillez m'aider. Je n'ai aucun problème à changer d'IDE et/ou de distribution linux.

1voto

v154c1 Points 1688

Votre installation de la bibliothèque semble être correcte (sinon, elle se plaindrait de l'absence de la bibliothèque). jpeglib.h pendant la compilation)

Le dossier example.c est censé faire partie de la documentation, pas d'un code que vous pouvez compiler et utiliser. Notez qu'il n'y a pas de main() par exemple. Vous devriez l'utiliser comme une référence sur la façon de coder les méthodes de compression et de décompression des fichiers jpeg.

Les variables image_width y image_height (et image_buffer ) sont déclarés comme extern On suppose donc qu'ils sont définis dans un autre fichier. Vous pouvez écrire votre programme en définissant ces variables et en remplissant le tampon et seulement après cela vous pouvez utiliser les méthodes fournies ( write_JPEG_file y read_JPEG_file ).

0voto

Al W Points 476
  1. Utilisez-vous une bibliothèque statique ou partagée ?
  2. Si c'est statique, est-ce que vous le placez après les fichiers objets dans la ligne de commande de l'éditeur de liens ?
  3. S'il est partagé, et que vous utilisez une chaîne d'outils plus récente, cela peut également être le problème.
  4. Si vous liez correctement, que montre readelf -s sur la bibliothèque partagée ? Que montre nm sur la bibliothèque statique ?

0voto

Raff89 Points 88

J'étais tellement sûr que example.c était en fait un exemple d'utilisation de cette bibliothèque que je n'ai pas vérifié son contenu. De plus, il y avait d'autres problèmes. Après avoir écrit un programme correct, j'ai rencontré une erreur :

error while loading shared libraries libjpeg.so.8: cannot open shared object file: No such file or directory

Mais cela a été corrigé par cette paire de commandes shell :

ranlib /usr/local/lib/libjpeg.a
ldconfig /usr/local/lib

J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X