erreur de link avec la biblio jpeglib -> que faire ? - C++ - Programmation
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) |
est-ce que ton projet est linké avec le .lib correspondant à la librairie ? un fichier du genre jpeglib.lib
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 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
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
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.
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 : |
Oui
LordAnkou a écrit : |
A condition que tu connaisses exactement les fonctions et leurs arguments de ladite DLL
LordAnkou a écrit : |
Si tes sources sont ceux d'une DLL, les .LIB correspondants seront générés automatiquement par Visual C++ pendant leur compilation
Marsh Posté le 18-08-2003 à 09:30:39
Citation : |
je risque de passer pour un idiot mais comment on fait ça ?
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
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 :
|
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
Marsh Posté le 18-08-2003 à 11:38:28
ReplyMarsh Posté le 18-08-2003 à 11:48:11
nom du fichier ?
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é :
Marsh Posté le 18-08-2003 à 23:20:46
J'demande le pour avoir embêté notre modo (préféré ) avec des conneries qui sont marquées dans le fichier d'install..
Marsh Posté le 19-08-2003 à 10:04:52
Citation : |
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
Marsh Posté le 19-08-2003 à 11:33:25
Citation : |
bon alors là je comprends vraiment pas !
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 !
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
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).
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 ?
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 :
|
pourtant j'ai bien lier le fichier dans la section link :
Code :
|
je vois pas ce qui ne va pas (j'ai bien le fichier dans le répertoir lib de VC++)
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????
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?
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+
Marsh Posté le 17-08-2003 à 22:00:48
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.
j'utilise VC++ 6.0
N.B : désolé me suis trompé de catégorie ! (merci de me l'avoir fait remarqué )
Message édité par lordankou le 17-08-2003 à 22:08:53
---------------