Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de compilateur C++

Sujet résolu
17 août 2018 à 13:56:45

Bonjour,

j'essaye de programme un jeu un peu bébéte en C++ en utilisant la librairie SFML. J'ai réussi à réaliser l'exemple de base proposé par la librairie. Au stade où je suis, j'essaye simplement de faire apparaitre une fenêtre où la map que j'ai stocké dans un fichier text, apparait.
Mon problème vient, je pense de mon compilateur. Celui-ci me renvoie les messages d'erreurs suivant:

Voici mon code:

%Main
#include <SFML/Graphics.hpp>
#include <iostream>
#include "map.h"
#include <string>


    int main()
{
    std::string a="../../res/cartes/test.txt";
    sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
    while (window.isOpen())
    {
        sf::Event event;

        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
            map carte(a);
            carte.afficherMap(&window);
        }
    }



    return 0;
}

%classe map.cpp
#include "map.h"
#include <iostream>
map::map()
{
    //ctor
}

map::map(std::string a)
{
    using namespace std;
    ifstream empCarte(a, ios::in);
    if(empCarte)
        {
            empCarte >> Longueur;
            empCarte >> Hauteur;
            char temp;
            int itemp;
            for (int i=0;i<Hauteur;i++){
                for (int j=0;j<Longueur;j++)
                {
                    empCarte >> temp;
                    itemp=temp-'0';
                    carte.push_back(itemp);
                }
            }
            empCarte.close();
            this->chText();
            sf::Sprite spTemp;
            for (int i=0;i<Hauteur;i++){
                for (int j=0;j<Longueur;j++)
                {
                    spTemp.setTexture(texture[carte[i*Hauteur+j]]);
                    spTemp.setPosition(sf::Vector2f(i*10,j*10));
                    tuile.push_back(spTemp);
                }

        }
    }
    else{cerr << "ERREUR: Impossible d'ouvrir le fichier." << endl;}
}

map::~map()
{
    //dtor
}

void map::ecrireMap(){
    using namespace std;
    for (int i=0;i<Hauteur;i++){
                for (int j=0;j<Longueur;j++)
                {
                   cout << carte[i*Hauteur+j] << " ";
                }
                cout <<" "<<  endl;
            }
}

void map::chText(){
    if (!texture[1].loadFromFile("../../res/textures/b1.png"))
        {
            texture[1].create(10,10);
        }
}

void map::afficherMap(sf::RenderWindow* fenetre){
    for (int i=0;i<Hauteur;i++){
        for (int j=0;j<Longueur;j++)
            {
            fenetre->draw(tuile[i*Hauteur+j]);
            }
        }
}

%include map.h
#include <string>
#include <fstream>
#include <vector>

class map
{
    public:
        map();
        map(std::string a);
        void ecrireMap();
        void afficherMap(sf::RenderWindow*);
        virtual ~map();

    protected:

    private:
        int Hauteur;
        int Longueur;
        int NbText;
        std::vector<int> carte;
        std::vector<sf::Sprite> tuile;
        sf::Texture texture[10];
        void chText();
};

#endif // MAP_H

Bien sur, mon compilateur est configuré correctement (enfin, pour le tutoriel de base):

Enfin, les dll sont bien à côté de l'exécutable, dans le même répertoire (j'ai modifié le répertoire de travail, histoire que le programme s'éxecute dans code block, de la même façon que si l'on cliquait dessus.)

Questions: Qu'est ce que ld.exe? Où puis-je ajouter les commandes -lsfml-graphics-2, -lsfml-window-2 et -lsfml-system-2? Comment puis-je compiler?

Bien à vous.

Matthias.

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2018 à 15:20:46

supprime les 3 libraries qui ne trouve pas .
  • Partager sur Facebook
  • Partager sur Twitter
17 août 2018 à 15:37:17

Merci beaucoup, ça marche.
Mais du coup, si jamais j'ai effectivement besoin de ces trois librairies, comment les ajouter?

-
Edité par MatthiasPac 17 août 2018 à 15:37:57

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2018 à 15:45:44

Je ne connais pas du tout C::B, mais ca semble correct. Es tu sur d'utiliser le meme compilateur qui a ete utilisé pour compiler la SFML ?
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2018 à 13:56:49

Je pense, comment puis-je vérifier cela?
A priori, j'utilise MinGW.
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2018 à 13:59:08

Quand tu as telechargé la SFML, le compilateur utilisé pour compiler doit etre indiqué.
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2018 à 15:30:47

Effectivement, je me souviens à postériori avoir bien galéré, changé le compilateur standard de C::B pour avoir le même que SFML. Je crois me souvenir m'être débrouillé pour avoir celui-là:GCC 7.3.0 MinGW (DW2) - 32-bit
  • Partager sur Facebook
  • Partager sur Twitter
20 août 2018 à 15:40:32

Notes supplémentaire:
Tu as du remarqué, tu as 2 configurations: Debug et Release.
Et les librairies ont presque un nom identiques, sauf que certaines on un "-d" en plus (d pour Debug).

Donc seul les librairies avec le "-d" doivent apparaître dans la configuration Debug, et les autres dans la configuration Release.

  • Partager sur Facebook
  • Partager sur Twitter
20 août 2018 à 17:04:56

Salut,

Es tu sur que tu as également défini le dossier dans lequel aller chercher les bibliothèques de la SFML?

Ta dernière image montre que tu as ajouté le dossier D:\SFML-2.5.0\include à la liste des dossiers qui doivent être utilisés pour rechercher les fichiers d'en-tête.

Mais, cela dénote également que ton installation de la SFML n'entre pas dans l'arborescence de fichier habituellement qu'utilise Gcc pour aller chercher "ce qu'il lui faut".

D'après les réglages que tu nous montre, il faut également indiquer à l'éditeur de liens qu'il doit aller voir du coté de D:\SFML-2.5.0\lib s'il n'y trouve pas certaines bibliothèques dont il a besoin (en fait, il devrait y trouver toutes les bibliothèques du projet SFML :D )

Pour ce faire, tu dois choisir l'onglet qui se trouve juste à droite de "Compiler"  dans "Search Directories" (c'est l'onglet "Linker"), et ajouter le dossier dans lequel se trouvent les différents fichier lib-sfml-x-y-.a (autrement dit le dossier D:\SFML-2.5.0\lib, du moins, a priori)

  • Partager sur Facebook
  • Partager sur Twitter
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
29 novembre 2018 à 13:26:51

Bonjour tout le monde.

Je tiens à vous remercier pour toutes vos réponses. Je vous présentes mes excuses concernant ma réponse tardive, mais le début d’année a été très chargé. J'ai finalement réussit à régler le problème, j'en ai d'autre maintenant que je vais régler avec un autre poste. xD

Merki encore.
:D
  • Partager sur Facebook
  • Partager sur Twitter