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 :

Inclure les dll dans la compilation


Sujet :

C++

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Inclure les dll dans la compilation
    Bonjour,

    J'ai actuellement un code C++ qui fonctionne avec la bibliothèque SFML.

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    #include <iostream>  
    #include <fstream>  
    #include <string>  
     
    #include <SFML/System.hpp>  
    #include <SFML/Graphics.hpp>  
     
    using namespace std;  
     
    unsigned int toGrey1(sf::Color col)  
    {  
        unsigned char ret;  
        ret = (unsigned int) (0.299 * (float) col.r + 0.587 * (float) col.g + 0.114 * (float) col.b);  
        return ret >> 7;  
    }  
     
    unsigned int round(float x)  
    {  
        unsigned int ret = (unsigned int) x;  
        if(x - (float) ret >= 0.5)  
            ret ++;  
        return ret;  
    }  
     
    int main(int argc, char **argv)  
    {  
        if(argc != 2)  
        {  
            cout << "Converts an image into a B&W 318*212 24bpp BMP" << endl;  
            cout << "Usage: IMG2BMP <input_file>" << endl;  
            return 0;  
        }  
     
        sf::Image img, dst;  
        float xFactor, yFactor;  
        if(!img.LoadFromFile(argv[1]))  
        {  
            cout << "Erreur: impossible d'ouvrir le fichier d'entree: \"" << argv[2] << "\"" << endl;  
            return 0;  
        }  
        xFactor = img.GetWidth() / 318.f;  
        yFactor = img.GetHeight() / 212.f;  
        dst.Create(318,212, sf::Color::White);  
        for(unsigned int i = 0; i < 318; i ++)  
            for(unsigned int j = 0; j < 212; j ++)  
                dst.SetPixel(i, j, toGrey1(img.GetPixel(round((float)i * xFactor), round((float) j * yFactor))) ? sf::Color::White : sf::Color::Black);  
        dst.SaveToFile("./converted.bmp");  
        return 0;  
    }


    Il se compile sans problème, mais je suis obligé d'avoir libgcc_s_dw2-1.dll et 3 dll de la SFML avec le fichier .exe formé pour qu'il s'exécute correctement.

    Je code sous CodeBlocks et j'ai mis dans les options du projet:
    Linker settings/ other links options:
    "-static-libgcc
    -lsfml-system
    -lsfml-graphics"

    Le compilateur est tout bêtement GNU GCC Compiler.

    Quelqu'un saurait comment inclure les parties intéressantes de ces dll directement dans le fichier .exe compilé?

    Pour info ça doit tourner sous Windows.

    Merci!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pour la sfml, il faut rajouter "-s" a la fin du nom de la library, et si tu utilise la SFML2, rajouter dans l'onglet define "SFML_STATIC". Pour gcc, je ne vois pas, c'est pourtant la bonne commande ( as tu bien vérifié que tu ne l'avais pas mise qu'en Release ou Debug ? )

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci de ta réponse.

    J'avais déjà défini le "SFML_STATIC".

    Je l'ai mis dans les trois cas: project, debug et release. (et les librairies aussi)

    Et pour le -s je n'ai pas compris où je dois le mettre.
    J'ai essayé "-static-libgcc
    -lsfml-graphics-s
    -lsfml-window-s
    -lsfml-system-s" .
    Ça me donne des erreurs à la compilation.

    Malgré ça j'ai toujours le même problème pour toutes les libraires.

    EDIT: J'utilise la version 1.6 .

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si tu utilise la SFML 1.6, pas besoin de definir SFML_STATIC. Peux tu poster tes erreurs de compilation ? (si ce sont bien des erreurs de compilation, et pas des erreurs de linkage ou d'execution, ça veut dire que ça ne vient pas des bibliotheques utilisées mais plutot de ton code)

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Les erreurs sont du type:
    "obj\release\main.o:main.cpp undefined reference to '_imp__..."

    J'avoue ne pas savoir si ce sont des erreurs de compilation en elle même où de linker.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Ce sont des erreur de linkage; essayer de lire le nom de la classe/fonction indiqué apres le "_imp__", si elle fait partie de la SFML, deux cas probable :
    -tu lie avec les library statiques( sfml-system-s, etc) et tu a definis SFML_DYNAMIC
    -tu lie avec les library dynamique( sfml-system, etc) et tu n'as pas defini SFML_DYNAMIC.
    Vu que je pense que tu es dans le premier, il faut donc enlever SFML_DYNAMIC

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai donc enlevé SFML_DYNAMIC dans les trois cas (project, debug et release). J'ai mis
    "-static-libgcc
    -lsfml-graphics-s
    -lsfml-window-s
    -lsfml-system-s"
    dans les trois cas.

    Maintenant j'ai toujours des erreurs, mais différentes.

    J'ai mis tout ça sur cette image, ce sera sans doute plus simple:
    http://i53.tinypic.com/2mgpp2b.jpg

  8. #8
    Invité
    Invité(e)
    Par défaut
    Peut-etre as-tu une version trop ancienne de gcc ?

    EDIT: essaye de voir si tu trouve une solution par ici

  9. #9
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je vais voir ça, merci de ton aide .

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    est-ce résolu?

Discussions similaires

  1. inclure les DLL dans OCX?
    Par gnaoui_9999 dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 24/12/2009, 01h04
  2. Inclure une DLL dans le .exe final?? possible?
    Par xavmax dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2005, 17h00
  3. [JAR][DLL][path] inclure des DLLs dans un jar
    Par blaz dans le forum Général Java
    Réponses: 5
    Dernier message: 28/07/2005, 12h29
  4. [ClassPath]Comment inclure les librairies dans un .BAT
    Par Kyti dans le forum Général Java
    Réponses: 2
    Dernier message: 26/03/2005, 08h07
  5. Inclure une dll dans une ressource
    Par bgcode dans le forum C++Builder
    Réponses: 4
    Dernier message: 21/08/2003, 11h12

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