erreur de link avec la biblio jpeglib -> que faire ?

erreur de link avec la biblio jpeglib -> que faire ? - C++ - Programmation

Marsh Posté le 17-08-2003 à 22:00:48    

voila les erreurs que j'obtiens au niveau du link : (compilation 0 erreurs, 0 warning)
 

Code :
  1. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_destroy_decompress(struct jpeg_decompress_struct *)" (?jpeg_destroy_decompress@@YAXPAUjpeg_decompress_struct@@@Z)
  2. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_finish_decompress(struct jpeg_decompress_struct *)" (?jpeg_finish_decompress@@YAHPAUjpeg_decompress_struct@@@Z)
  3. tetris.obj : error LNK2001: unresolved external symbol "unsigned int __cdecl jpeg_read_scanlines(struct jpeg_decompress_struct *,unsigned char * *,unsigned int)" (?jpeg_read_scanlines@@YAIPAUjpeg_decompress_struct@@PAPAEI@Z)
  4. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_start_decompress(struct jpeg_decompress_struct *)" (?jpeg_start_decompress@@YAHPAUjpeg_decompress_struct@@@Z)
  5. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_read_header(struct jpeg_decompress_struct *,int)" (?jpeg_read_header@@YAHPAUjpeg_decompress_struct@@H@Z)
  6. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_stdio_src(struct jpeg_decompress_struct *,struct _iobuf *)" (?jpeg_stdio_src@@YAXPAUjpeg_decompress_struct@@PAU_iobuf@@@Z)
  7. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_CreateDecompress(struct jpeg_decompress_struct *,int,unsigned int)" (?jpeg_CreateDecompress@@YAXPAUjpeg_decompress_struct@@HI@Z)
  8. tetris.obj : error LNK2001: unresolved external symbol "struct jpeg_error_mgr * __cdecl jpeg_std_error(struct jpeg_error_mgr *)" (?jpeg_std_error@@YAPAUjpeg_error_mgr@@PAU1@@Z)
  9. Debug/tetris.exe : fatal error LNK1120: 8 unresolved externals


 
j'ai réessayé de retélécharger les librairies et ça ne marche tjrs pas. je vois pas trop d'ou ça peut venir.
 
j'utilise VC++ 6.0
 
N.B : désolé me suis trompé de catégorie ! (merci de me l'avoir fait remarqué  :hello: )


Message édité par lordankou le 17-08-2003 à 22:08:53

---------------

Reply

Marsh Posté le 17-08-2003 à 22:00:48   

Reply

Marsh Posté le 17-08-2003 à 22:03:59    

Erreur de linkage donc cat biblio link..hmm [:meganne]

Reply

Marsh Posté le 17-08-2003 à 22:56:53    

LordAnkou a écrit :

voila les erreurs que j'obtiens au niveau du link : (compilation 0 erreurs, 0 warning)
 
j'ai réessayé de retélécharger les librairies et ça ne marche tjrs pas. je vois pas trop d'ou ça peut venir.


est-ce que ton projet est linké avec le .lib correspondant à la librairie ? un fichier du genre jpeglib.lib


Message édité par Harkonnen le 17-08-2003 à 22:57:12

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-08-2003 à 23:11:24    

bah justement j'y ai penser. le problème c que j'ai télécharger les sources (fichiers *.c et *.h) et y'a pas de DLL.
et étant donné que je suis débutant avec toutes ces histoires de librairies  :whistle: je ne sais pas comment on fait pour en créer une à partir des sources.
 
mon problème doit venir de là comme tu me le fais remarquer Harkonnen.
 
donc euh comment faire pour créer cette DLL ? (ensuite je sais rajouter le lib au projet quand je l'ai).
Merci d'avance


---------------

Reply

Marsh Posté le 17-08-2003 à 23:18:25    

Ne confonds pas .DLL et .LIB !
Une DLL est une librairie liée dynamiquement pendant l'éxécution de ton programme. En clair, pendant son exécution, ton programme charge cette DLL en mémoire, et utilise les fonctions qu'elle expose.
Un fichier .LIB contient des fonctions liées statiquement au moment du linkage de ton programme. En clair : les fonctions d'un fichier .LIB seront présentes dans ton exécutable final, contrairement aux fonctions d'une DLL, qui "restent" dans la DLL.
Généralement, un .LIB est utilisé lorsque tu veux appeler les fonctions d'une DLL : le .LIB contient le code qui génèrera les appels aux fonctions de la DLL lors de l'éxécution de ton programme. Il est fourni avec la DLL en question dans la grande majorité des cas.
Si ce n'est pas le cas, tu dois utiliser la fonction Win32 GetProcAddress() pour récupérer un pointeur vers la fonction de la DLL que tu veux utiliser.
Si tu as les sources de la DLL, un .LIB sera généré automatiquement si tu le compiles avec VC++6.
 
Tu trouveras plus d'infos dans ce topic :
http://forum.hardware.fr/forum2.ph [...] 798&cat=10
 
 


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 17-08-2003 à 23:31:59    

donc si j'ai bien compris le fichier .lib d'une DLL sert de "pointeur" vers la fonction contenu dans la DLL.
tandis que quand tu charges la DLL en mémoire tu pointes directement vers les fonctions.
 
Donc en fait en utilisant la DLL tu économises une étape, celle d'utiliser la lib ?
 
bon j'espère que c ça lol.
 
euh sinon bah pour mon problème je n'ai pas de fichier .DLL et encore moins de .lib
 
je me retrouve donc qu'avec des fichiers sources.


---------------

Reply

Marsh Posté le 17-08-2003 à 23:35:18    

LordAnkou a écrit :

donc si j'ai bien compris le fichier .lib d'une DLL sert de "pointeur" vers la fonction contenu dans la DLL.


C'est très shématisé, mais on peut dire ça.
 

LordAnkou a écrit :


tandis que quand tu charges la DLL en mémoire tu pointes directement vers les fonctions.


Oui
 

LordAnkou a écrit :


Donc en fait en utilisant la DLL tu économises une étape, celle d'utiliser la lib ?


A condition que tu connaisses exactement les fonctions et leurs arguments de ladite DLL
 

LordAnkou a écrit :


euh sinon bah pour mon problème je n'ai pas de fichier .DLL et encore moins de .lib
 
je me retrouve donc qu'avec des fichiers sources.


Si tes sources sont ceux d'une DLL, les .LIB correspondants seront générés automatiquement par Visual C++ pendant leur compilation


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2003 à 09:30:39    

Citation :


Si tes sources sont ceux d'une DLL, les .LIB correspondants seront générés automatiquement par Visual C++ pendant leur compilation


 
je risque de passer pour un idiot  :( mais comment on fait ça ?  :cry:


---------------

Reply

Marsh Posté le 18-08-2003 à 09:33:17    

tu prends VC++, tu créé un projet de type DLL, tu inclues tes sources à ce projet et tu compiles normalement [:sinclaire]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2003 à 11:27:36    

bah j'ai donc créer le fichier jpeglib.lib et jpeglib.dll
 
jpeglib.lib dans le répertoire lib de vc++ et jpeglib.dll dans le même répertoire.
 
de plus j'ai bien rajouté dans les liens de mon projet le fichier jpeglib.lib
 
mais j'ai tjrs droit au moment de l'édition des liens :  
 

Code :
  1. Linking...
  2. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_destroy_decompress(struct jpeg_decompress_struct *)" (?jpeg_destroy_decompress@@YAXPAUjpeg_decompress_struct@@@Z)
  3. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_finish_decompress(struct jpeg_decompress_struct *)" (?jpeg_finish_decompress@@YAHPAUjpeg_decompress_struct@@@Z)
  4. tetris.obj : error LNK2001: unresolved external symbol "unsigned int __cdecl jpeg_read_scanlines(struct jpeg_decompress_struct *,unsigned char * *,unsigned int)" (?jpeg_read_scanlines@@YAIPAUjpeg_decompress_struct@@PAPAEI@Z)
  5. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_start_decompress(struct jpeg_decompress_struct *)" (?jpeg_start_decompress@@YAHPAUjpeg_decompress_struct@@@Z)
  6. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_read_header(struct jpeg_decompress_struct *,int)" (?jpeg_read_header@@YAHPAUjpeg_decompress_struct@@H@Z)
  7. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_stdio_src(struct jpeg_decompress_struct *,struct _iobuf *)" (?jpeg_stdio_src@@YAXPAUjpeg_decompress_struct@@PAU_iobuf@@@Z)
  8. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_CreateDecompress(struct jpeg_decompress_struct *,int,unsigned int)" (?jpeg_CreateDecompress@@YAXPAUjpeg_decompress_struct@@HI@Z)
  9. tetris.obj : error LNK2001: unresolved external symbol "struct jpeg_error_mgr * __cdecl jpeg_std_error(struct jpeg_error_mgr *)" (?jpeg_std_error@@YAPAUjpeg_error_mgr@@PAU1@@Z)
  10. fatal error LNK1120: 8 unresolved externals


---------------

Reply

Marsh Posté le 18-08-2003 à 11:27:36   

Reply

Marsh Posté le 18-08-2003 à 11:32:49    

donne moi le lien ou tu as récupéré le source de la librairie jpeg


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2003 à 11:38:28    

je l'ai récupéré ici :  
ftp://ftp.uu.net/graphics/jpeg/
 :D


---------------

Reply

Marsh Posté le 18-08-2003 à 11:48:11    

nom du fichier ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2003 à 11:53:39    

jpegsrc.v6b.tar.gz
 
 
oups désolé  :jap:


---------------

Reply

Marsh Posté le 18-08-2003 à 20:35:32    

:bounce:


---------------

Reply

Marsh Posté le 18-08-2003 à 21:06:14    

Oui oui, ça vient, laisse moi le temps de compiler la librarie !
 
Alors, j'ai récupéré le fichier, et j'ai compilé ce qu'il fallait. Résultat des courses, j'obtiens les fichiers suivants :
- libjpeg.lib (ce dont tu as besoin)
- wrjpgcom.exe
- rdjpgcom.exe
- jpegtran.exe
- djpeg.exe
- cjpeg.exe
 
Alors déjà, il va falloir me dire comment tu as fait pour obtenir un libjpeg.lib, pour la simple raison qu'il est nécessaire de créer un fichier jconfig.h à partir du fichier jconfig.doc livré avec l'archive.
 
Ensuite, tu n'as pas besoin de créer un projet et d'y inclure tous les sources de cette librairie, un makefile est présent pour une majorité de compilos et d'OS (dont VC++). Tu n'as même pas à ouvrir Visual C++, uniquement à lancer le make sur le makefile correspondant à Visual C++.
 
Enfin, contrairement à ce que tu me dis, aucun fichier DLL n'est généré, uniquement le fichier .LIB (ce qui est normal car cette librairie semble contenir des fonctions destinées à être liées statiquement).
 
Donc tu m'as menti petit coquin ! Tu n'as pas généré les fichiers car tu n'as pas lu la doc livrée avec la librairie, qui explique tout le processus de compilation et d'installation !
 
Conclusion : file lire la doc contenue dans le fichier install.doc de cette librairie, et reviens me voir si tu as rééllement un problème ! Cette librairie se compile parfaitement du 1er coup, il suffit juste de lire le mode d'emploi !
 
En résumé : [:sh@rdar]


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 18-08-2003 à 23:20:46    

J'demande le [:ban] pour avoir embêté notre modo (préféré :whistle:) avec des conneries qui sont marquées dans le fichier d'install..

Reply

Marsh Posté le 19-08-2003 à 10:04:52    

Citation :


Donc tu m'as menti petit coquin ! Tu n'as pas généré les fichiers car tu n'as pas lu la doc livrée avec la librairie, qui explique tout le processus de compilation et d'installation !  


 
si tu veux que je t'envoie les fichiers y'a pas de problèmes (j'ai pas menti !!)
 
bon vais essayer de suivre la doc même si je comprends pas tout


---------------

Reply

Marsh Posté le 19-08-2003 à 11:33:25    

Citation :


uniquement à lancer le make sur le makefile correspondant à Visual C++.  


 
bon alors là je comprends vraiment pas !  :heink:  
 
j'ai lu le fichier instal et 95% des trucs c pour les machines unix et pour ce qui est des machines windows bah y'a pas grand chose (faut pas oublier que j'y connais rien ou presque à ce niveau donc c sur que pour vous ça semble facile mais pour moi ça l'est moins).
 
Donc en résumé voila ce que j'ai fait :  :(  
j'ai crée un projet static librairy sous vc++
j'ai rajouté les sources (y compris le fichier jconfig).
Or quand je compile j'ai droit à des erreurs à différents fichier sources (ceux qui s'occupent de la mémoire à priori).
en les virant j'arrive à compiler mais ensuite quand je veux utiliser la librairie ça plante...
 
je veux pas faire preuve de mauvaise fois mais déjà que je bosse sur une machine qui plante toutes les 5 minutes (vive 98se...) et qui rame comme pas possible, alors please aider moi !  :cry:  


---------------

Reply

Marsh Posté le 19-08-2003 à 11:37:53    

Bon, abrégeons ton calvaire...
 
- Tu copies/colles le contenu du fichier jconfig.doc dans un fichier jconfig.h
 
- Tu lances la fenêtre de commandes DOS
 
- CD rep d'install de ta librairie
 
- nmake makefile.vc
 
Et c'est tout. Tu auras ensuite tous les fichiers que je t'ai dit plus haut


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 19-08-2003 à 14:44:07    

bon je crois que je vais attendre de revenir sous linux car euh ça marche pas la dernière étape.  
 
ça me marque non de fichier incorrect (d'ailleurs ça sera pas make à la place de nmake ? mais bon j'ai utilisé les deux de toute façon).


---------------

Reply

Marsh Posté le 19-08-2003 à 17:35:33    

bon on va faire plus simple !  
qui serait sympa de m'envoyer le fichier jpeglib.lib ?


---------------

Reply

Marsh Posté le 19-08-2003 à 20:01:03    

bon alors j'ai récupéré un fichier jpeglib.lib et j'obtiens tjrs :
 

Code :
  1. Linking...
  2. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_destroy_decompress(struct jpeg_decompress_struct *)" (?jpeg_destroy_decompress@@YAXPAUjpeg_decompress_struct@@@Z)
  3. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_finish_decompress(struct jpeg_decompress_struct *)" (?jpeg_finish_decompress@@YAHPAUjpeg_decompress_struct@@@Z)
  4. tetris.obj : error LNK2001: unresolved external symbol "unsigned int __cdecl jpeg_read_scanlines(struct jpeg_decompress_struct *,unsigned char * *,unsigned int)" (?jpeg_read_scanlines@@YAIPAUjpeg_decompress_struct@@PAPAEI@Z)
  5. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_start_decompress(struct jpeg_decompress_struct *)" (?jpeg_start_decompress@@YAHPAUjpeg_decompress_struct@@@Z)
  6. tetris.obj : error LNK2001: unresolved external symbol "int __cdecl jpeg_read_header(struct jpeg_decompress_struct *,int)" (?jpeg_read_header@@YAHPAUjpeg_decompress_struct@@H@Z)
  7. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_stdio_src(struct jpeg_decompress_struct *,struct _iobuf *)" (?jpeg_stdio_src@@YAXPAUjpeg_decompress_struct@@PAU_iobuf@@@Z)
  8. tetris.obj : error LNK2001: unresolved external symbol "void __cdecl jpeg_CreateDecompress(struct jpeg_decompress_struct *,int,unsigned int)" (?jpeg_CreateDecompress@@YAXPAUjpeg_decompress_struct@@HI@Z)
  9. tetris.obj : error LNK2001: unresolved external symbol "struct jpeg_error_mgr * __cdecl jpeg_std_error(struct jpeg_error_mgr *)" (?jpeg_std_error@@YAPAUjpeg_error_mgr@@PAU1@@Z)


 
pourtant j'ai bien lier le fichier dans la section link :  
 

Code :
  1. kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib jpeglib.lib


 
je vois pas ce qui ne va pas (j'ai bien le fichier dans le répertoir lib de VC++)


Message édité par lordankou le 19-08-2003 à 21:48:55

---------------

Reply

Marsh Posté le 04-04-2008 à 15:31:00    

moi g le meme blem!j éssaye de compiler une biblo "levmar" sous visual c++6.0 avec la commande makefile et g pratiquement les meme message d erreur!!!qlq 1 peut m aider????

Reply

Marsh Posté le 04-04-2008 à 15:32:46    

stp g besoin d aide!!j éssaye de compiler une biblo avec vc++6 avec la commande mikefile mé g des message d erreur de linkage!!!tu peux m aider?

Reply

Marsh Posté le 06-11-2008 à 11:27:01    

Bonjour,
 
il me semble que tu code sous VC6 en C++ donc si tu corriger tes erreurs de link, n'oubli surtout pas que cette lib est en C et non en C++
donc :
extern "C"
{
#include "jpeglib.h"
#include "jerror.h"  
}
 
za+

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed