Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: le programme SFML de test ne compile pas  (Lu 1415 fois)

0 Membres et 1 Invité sur ce sujet

pulk66

  • Newbie
  • *
  • Messages: 2
    • Voir le profil
le programme SFML de test ne compile pas
« le: Juillet 27, 2019, 11:46:01 pm »
Bonjour, je suis un nouveau programmeur C++ et j'essai d'installer la bibliothèque SFML en suivant le tuto du site. Le problème c'est quand j'essai de compiler le code donner pour voir si tout marche :
#include <SFML/Graphics.hpp>

int main()
{
    sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!");
    sf::CircleShape shape(100.f);
    shape.setFillColor(sf::Color::Green);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(shape);
        window.display();
    }

    return 0;
}
 

et quand je le compile grace a
g++ -c main.cpp
rien ne se passe, j'ai donc essayer la méthode que j'utilise d'habitude qui est :
g++ -o main main.cpp
et ça ne creer pas l'executable en me mettant cette erreur :
/usr/bin/ld : /tmp/ccUjFxEG.o : dans la fonction « main » :
main.cpp:(.text+0x75) : référence indéfinie vers « sf::String::String(char const*, std::locale const&) »
/usr/bin/ld : main.cpp:(.text+0x93) : référence indéfinie vers « sf::VideoMode::VideoMode(unsigned int, unsigned int, unsigned int) »
/usr/bin/ld : main.cpp:(.text+0xc6) : référence indéfinie vers « sf::RenderWindow::RenderWindow(sf::VideoMode, sf::String const&, unsigned int, sf::ContextSettings const&) »
/usr/bin/ld : main.cpp:(.text+0x100) : référence indéfinie vers « sf::CircleShape::CircleShape(float, unsigned long) »
/usr/bin/ld : main.cpp:(.text+0x10e) : référence indéfinie vers « sf::Color::Green »
/usr/bin/ld : main.cpp:(.text+0x116) : référence indéfinie vers « sf::Shape::setFillColor(sf::Color const&) »
/usr/bin/ld : main.cpp:(.text+0x125) : référence indéfinie vers « sf::Window::isOpen() const »
/usr/bin/ld : main.cpp:(.text+0x146) : référence indéfinie vers « sf::Window::pollEvent(sf::Event&) »
/usr/bin/ld : main.cpp:(.text+0x163) : référence indéfinie vers « sf::Window::close() »
/usr/bin/ld : main.cpp:(.text+0x189) : référence indéfinie vers « sf::Color::Color(unsigned char, unsigned char, unsigned char, unsigned char) »
/usr/bin/ld : main.cpp:(.text+0x1a6) : référence indéfinie vers « sf::RenderTarget::clear(sf::Color const&) »
/usr/bin/ld : main.cpp:(.text+0x1bf) : référence indéfinie vers « sf::RenderStates::Default »
/usr/bin/ld : main.cpp:(.text+0x1ca) : référence indéfinie vers « sf::RenderTarget::draw(sf::Drawable const&, sf::RenderStates const&) »
/usr/bin/ld : main.cpp:(.text+0x1d9) : référence indéfinie vers « sf::Window::display() »
/usr/bin/ld : main.cpp:(.text+0x201) : référence indéfinie vers « sf::RenderWindow::~RenderWindow() »
/usr/bin/ld : main.cpp:(.text+0x26b) : référence indéfinie vers « sf::RenderWindow::~RenderWindow() »
/usr/bin/ld : /tmp/ccUjFxEG.o : dans la fonction « sf::CircleShape::~CircleShape() » :
main.cpp:(.text._ZN2sf11CircleShapeD2Ev[_ZN2sf11CircleShapeD5Ev]+0xf) : référence indéfinie vers « vtable for sf::CircleShape »
/usr/bin/ld : main.cpp:(.text._ZN2sf11CircleShapeD2Ev[_ZN2sf11CircleShapeD5Ev]+0x1d) : référence indéfinie vers « vtable for sf::CircleShape »
/usr/bin/ld : main.cpp:(.text._ZN2sf11CircleShapeD2Ev[_ZN2sf11CircleShapeD5Ev]+0x31) : référence indéfinie vers « sf::Shape::~Shape() »
collect2: error: ld returned 1 exit status

je n'arrive pas a la résoudre, pouvez vous m'aider ?

G.

  • Hero Member
  • *****
  • Messages: 1590
    • Voir le profil
Re: le programme SFML de test ne compile pas
« Réponse #1 le: Juillet 28, 2019, 12:40:38 am »
Faut lier la bibliothèque aussi je pense.
Puis, vous devez lier le fichier compilé aux bibliothèques SFML afin de produire l'exécutable final. SFML est composée de 5 modules (système, fenêtrage, graphique, réseau et audio), et il y a une bibliothèque pour chacun.
Pour lier une bibliothèque SFML, vous devez ajouter "-lsfml-xxx" à votre ligne de commande, par exemple "-lsfml-graphics" pour le module graphique (par rapport au nom du fichier correspondant, le préfixe "lib" et l'extension ".so" doivent être omis).

Citer
g++ main.o -o sfml-app -lsfml-graphics -lsfml-window -lsfml-system