IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Problème GDI+ et édition de liens


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut Problème GDI+ et édition de liens
    Bonjour à vous !

    Je reste bloqué depuis plusieurs heures au niveau de la compilation d'un programme tout simple dans lequel j'essaye d'utiliser la librairie gdiplus.h et plus spécialement la classe Bitmap.

    J'ai effectué des recherches, mais mon problème est sans doute tellement basique que je ne trouve rien (ou ne parviens pas à le formuler correctement).

    Voilà mon simple code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void testGDI() {
    	Bitmap b(L"test.bmp");
    }
    Voilà au cas où tous les includes que j'effectue, vous remarquerez que ce qui nous interesse est en bas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>                         
    #include <stdlib.h>
    #include <iostream>
    #include <windows.h>
    #include <GL/gl.h>
    #include <GL/glu.h>
    #include <GL/glut.h>
     
    #include <string>
    #include <sstream>
    #include <fstream>
     
    #include <gdiplus.h>
    #include <wchar.h>
     
    using namespace Gdiplus;
    Et voilà donc les erreurs de compilation que me donne Visual C++ 2005 Express :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Compilation en cours...
    ficMain.cpp
    Édition des liens en cours...
    ficMain.obj : error LNK2019: symbole externe non résolu _GdipFree@4 référencé dans la fonction "public: static void __cdecl Gdiplus::GdiplusBase::operator delete(void *)" (??3GdiplusBase@Gdiplus@@SAXPAX@Z)
    ficMain.obj : error LNK2019: symbole externe non résolu _GdipAlloc@4 référencé dans la fonction "public: static void * __cdecl Gdiplus::GdiplusBase::operator new(unsigned int)" (??2GdiplusBase@Gdiplus@@SAPAXI@Z)
    ficMain.obj : error LNK2019: symbole externe non résolu _GdipDisposeImage@4 référencé dans la fonction "public: virtual __thiscall Gdiplus::Image::~Image(void)" (??1Image@Gdiplus@@UAE@XZ)
    ficMain.obj : error LNK2019: symbole externe non résolu _GdipCreateBitmapFromFile@8 référencé dans la fonction "public: __thiscall Gdiplus::Bitmap::Bitmap(wchar_t const *,int)" (??0Bitmap@Gdiplus@@QAE@PB_WH@Z)
    ficMain.obj : error LNK2019: symbole externe non résolu _GdipCreateBitmapFromFileICM@8 référencé dans la fonction "public: __thiscall Gdiplus::Bitmap::Bitmap(wchar_t const *,int)" (??0Bitmap@Gdiplus@@QAE@PB_WH@Z)
    ficMain.obj : error LNK2019: symbole externe non résolu _GdipCloneImage@8 référencé dans la fonction "public: virtual class Gdiplus::Image * __thiscall Gdiplus::Image::Clone(void)" (?Clone@Image@Gdiplus@@UAEPAV12@XZ)
    Debug\testOpenGL.exe : fatal error LNK1120: 6 externes non résolus
    Donc ça, on le sait bien, c'est qu'il manque quelque part dans les paramètres du projet ou même du compilateur une référence vers une DLL ou une LIB requise. Seulement, je ne vois pas de laquelle il peut s'agir, car gdiplus.lib est dans "C:\Program Files\Microsoft Platform SDK\Lib" et j'ai vérifié qu'il est bien dans les repertoires à checker.

    Je pense qu'il me manque donc un autre fichier, mais j'ai besoin de savoir lequel pour avancer.

    Autrement, il s'agit peut-être d'une bourde de ma part. Je n'ai pas fait de C++ depuis des années, et par exemple j'ai perdu 30 minutes tout à l'heure sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bitmap b = Bitmap(L"test.bmp");
    Au lieu de :

    J'attens vos précieux conseils.

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    T'es-tu assuré que gdiplus.lib est bien référencée dans le projet (par un #pragma comment ou dans les options du projet) ? Je ne crois pas qu'elle fasse partie des Default Libraries...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Salut Médinoc, merci de bien vouloir m'aider.

    J'ai bien retrouvé le fichier GdiPlus.lib dans le répertoire : C:\Program Files\Microsoft Platform SDK\Lib

    Au niveau de Visual C++ Express 2005, j'ai ajouté ce repertoire dans :
    Outils > Options ... > Projets et Solutions > Répertoires de VC++ > Fichiers de bibliothèques > "C:\Program Files\Microsoft Platform SDK\Bin"

    J'ai fais de la même façon pour utiliser OpenGL et Glut, ça a fonctionné.

    Après ce que tu viens de me dire, j'ai ajouté aussi le répertoire au projet dans les propriétés > editeur de liens > Général > Répertoires de bibliothèques supplémentaires > "C:\Program Files\Microsoft Platform SDK\Bin"

    Pourtant, Visual ne trouve toujours pas ce dont il a besoin. Mon problème n'est-il pas lié à l'absence d'un autre fichier dll ou d'une lib qui se trouverait ailleurs ?

    T'es-tu assuré que gdiplus.lib est bien référencée dans le projet (par un #pragma comment ou dans les options du projet) ?
    Je ne sais pas ce qu'est un #pragma comment ... Peux-tu m'éclairer ?

    Merci

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Les deux façons de lier un projet à une bibliothèque statique, sous Visual :
    1. "Project properties" -> "Configuration properties" -> "Linker" -> "Input" -Ajouter le nom (exemple : gdiplus.lib) dans "Additional Dependencies".
    2. Ajouter dans un fichier source la ligne:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      #pragma comment(lib, "gdiplus.lib")
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    En lisant la doc de la SDK de Microsoft, je viens de voir que pour utiliser DirectShow, il fallait installer DirectX (et télécharger les librairies de développement correspondantes si je comprends bien).

    Est-ce que vous pensez que GDIplus a aussi ce genre de dépendance ?

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    J'ai testé les deux méthodes que tu viens de me passer et cela compile désormais !

    Si j'ai bien compris, même si j'ai spécifié les répertoires dans lesquels le compilateur doit regarder pour trouver les eventuelles lib requises, il y en a certaines qu'il ne va pas aller chercher sauf si on le force ?

    Pourquoi cela ?

    Laquelle des deux méthodes est la plus "propre" à ton avis ?

    Je te remercie de m'avoir aidé, je n'aurais jamais trouvé tout seul

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 392
    Par défaut
    Un compilo ne va pas chercher les libs sans qu'on lui dise (et non force), sauf pour les default libraries. Et heureusement, sinon chaque édition de liens durerait plusieurs heures.
    Le fait d'ajouter les répertoires indique juste au compilo où chercher pour trouver des bibliothèques qu'on lui a dit d'inclure.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Par défaut
    Encore merci de ton aide, j'ai appris quelque chose de très important aujourd'hui... (après 5 ans d'études en informatique, je ne comprends pas comme c'est possible )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème lors d'édition de lien
    Par scary dans le forum C++
    Réponses: 17
    Dernier message: 15/04/2010, 21h48
  2. Problème d'édition de lien
    Par Kodamas dans le forum Autres éditeurs
    Réponses: 10
    Dernier message: 05/06/2006, 13h50
  3. [g++] Problème d'édition de liens
    Par glKabuto dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 31/05/2006, 19h10
  4. [Dev-C++] Problème d'édition des liens
    Par shura dans le forum EDI
    Réponses: 5
    Dernier message: 30/08/2005, 09h35
  5. Problème à l'édition des liens avec BCC55 et Xerces
    Par ShootDX dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/11/2003, 14h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo