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

Auteur Sujet: [windows] compilation en ligne de commande  (Lu 9056 fois)

0 Membres et 1 Invité sur ce sujet

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
[windows] compilation en ligne de commande
« le: Juillet 31, 2013, 12:10:21 am »
Bonsoir,

j'essaie actuellement de compiler un fichier de base SFML sous Windows XP, mais sans succès.
Le contenu du fichier :

#include <iostream>
#include <SFML/Graphics.hpp>

int main()
{
    sf::Window window(sf::VideoMode(800, 600), "My window");
        std::cout << "Hello world !" << std::endl;

    return 0;
}

L'erreur de compilation :
g++ -IC:/Library/SFML-2.1/include -LC:/Library/SFML-2.1/lib -lsfml-graphics -lsf
ml-window -lsfml-system -o test main.cpp
C:\DOCUME~1\Jairard\LOCALS~1\Temp\ccZZ1q0m.o:main.cpp:(.text+0xe2): undefined re
ference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
C:\DOCUME~1\Jairard\LOCALS~1\Temp\ccZZ1q0m.o:main.cpp:(.text+0x108): undefined r
eference to `_imp___ZN2sf9VideoModeC1Ejjj'
C:\DOCUME~1\Jairard\LOCALS~1\Temp\ccZZ1q0m.o:main.cpp:(.text+0x141): undefined r
eference to `_imp___ZN2sf6WindowC1ENS_9VideoModeERKNS_6StringEjRKNS_15ContextSet
tingsE'
C:\DOCUME~1\Jairard\LOCALS~1\Temp\ccZZ1q0m.o:main.cpp:(.text+0x18e): undefined r
eference to `_imp___ZN2sf6WindowD1Ev'
C:\DOCUME~1\Jairard\LOCALS~1\Temp\ccZZ1q0m.o:main.cpp:(.text+0x1b2): undefined r
eference to `_imp___ZN2sf6WindowD1Ev'
C:\DOCUME~1\Jairard\LOCALS~1\Temp\ccZZ1q0m.o:main.cpp:(.text+0x1d2): undefined r
eference to `_imp___ZN2sf6WindowD1Ev'
c:/mingw/bin/../lib/gcc/i686-w64-mingw32/4.8.1/../../../../i686-w64-mingw32/bin/
ld.exe: C:\DOCUME~1\Jairard\LOCALS~1\Temp\ccZZ1q0m.o: bad reloc address 0xf in s
ection `.text$_ZN2sf6StringD1Ev[__ZN2sf6StringD1Ev]'
collect2.exe: error: ld returned 1 exit status
makefile:18: recipe for target 'all' failed
mingw32-make: *** [all] Error 1

Je précise que la SFML est bien installée dans C:/Library/SFML-2.1 et que j'ai téléchargé la version GCC 4.7 MinGW (DW2) - 32 bits.
Vu la tête de l'erreur de compilation et en ayant cherché un peu sur le forum, je me suis dit que c'était probablement une erreur de mix de version de gcc, surtout que j'avais fait des manip pas très propres dernièrement. J'ai donc téléchargé un mingw tout neuf et supprimé les versions que j'avais avant, mais toujours la même erreur  :-\

La sortie de g++ -v:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/i686-w64-mingw32/4.8.1/lto-wrapp
er.exe
Target: i686-w64-mingw32
Configured with: ../../../src/gcc-4.8.1/configure --host=i686-w64-mingw32 --buil
d=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/t
mp/x32-481-posix-dwarf-r3/mingw32 --enable-shared --enable-static --disable-mult
ilib --enable-languages=ada,c,c++,fortran,objc,obj-c++,lto --enable-libstdcxx-ti
me=yes --enable-threads=posix --enable-libgomp --enable-lto --enable-graphite --
enable-checking=release --enable-fully-dynamic-string --enable-version-specific-
runtime-libs --disable-sjlj-exceptions --with-dwarf2 --disable-isl-version-check
 --disable-cloog-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug
 --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --dis
able-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=i686 --wit
h-tune=generic --with-libiconv --with-system-zlib --with-gmp=/tmp/mingw-prereq/i
686-w64-mingw32-static --with-mpfr=/tmp/mingw-prereq/i686-w64-mingw32-static --w
ith-mpc=/tmp/mingw-prereq/i686-w64-mingw32-static --with-isl=/tmp/mingw-prereq/i
686-w64-mingw32-static --with-cloog=/tmp/mingw-prereq/i686-w64-mingw32-static --
enable-cloog-backend=isl --with-pkgversion='rev3, Built by MinGW-builds project'
 --with-bugurl=http://sourceforge.net/projects/mingwbuilds CFLAGS='-O2 -pipe -I/
tmp/x32-481-posix-dwarf-r3/libs/include -I/tmp/mingw-prereq/x32-zlib/include -I/
tmp/mingw-prereq/i686-w64-mingw32-static/include' CXXFLAGS='-O2 -pipe -I/tmp/x32
-481-posix-dwarf-r3/libs/include -I/tmp/mingw-prereq/x32-zlib/include -I/tmp/min
gw-prereq/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/tmp/x32-4
81-posix-dwarf-r3/libs/lib -L/tmp/mingw-prereq/x32-zlib/lib -L/tmp/mingw-prereq/
i686-w64-mingw32-static/lib -L/tmp/x32-481-posix-dwarf-r3/mingw32/opt/lib -Wl,--
large-address-aware'
Thread model: posix
gcc version 4.8.1 (rev3, Built by MinGW-builds project)

Peut-être que ça vient de la version de mingw,. Quand je l'ai téléchargé on m'a proposé plusieurs versions, notamment posix/win32 pour la gestion des threads et dwarf/sjlj pour la gestion des exception. J'ai choisi les threads en posix et dwarf pour les exceptions, ce qui me semblait le plus cohérent, mais peut-être que l'erreur vient de là ?

EDIT: je viens de tester avec les threads en win32, même résultat  :'(
« Modifié: Juillet 31, 2013, 12:35:29 am par Jairard »

Algue-Rythme

  • Newbie
  • *
  • Messages: 6
    • Voir le profil
    • Progdupeupl
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #1 le: Juillet 31, 2013, 05:10:57 pm »
Salut,

Il me semble que tu t'y prends dans le mauvais ordre pour indiquer l'emplacement des bibliothèques SFML à ton éditeur de liens (de toutes façons les problèmes de références indéfinies sont toujours en rapport avec lui).

Je crois que tu dois indiquer ces options d'édition des liens après le nom de ton fichier source.

Ta ligne de commande ressemblerait donc à ça :

g++ -IC:/Library/SFML-2.1/include -o test main.cpp -LC:/Library/SFML-2.1/lib -lsfml-graphics -lsf
ml-window -lsfml-system
« Modifié: Juillet 31, 2013, 05:13:18 pm par Algue-Rythme »
Les amis vont et viennent, mais les ennemis s'accumulent.

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #2 le: Juillet 31, 2013, 05:18:51 pm »
Euh, je ne crois pas que l'ordre des arguments passés à g++ ait une quelconque importance  ???
Je testerais quand même dès que possible.

Mais du coup tu me fais pensé que l'ordre de linkage des bilbiothèques a peut-être une importance (je parle des -lsfml-graphics, -lsfml-window, -lsfml-system). Je ferais quelques tests à ce niveau-là aussi.

En tout vas merci d'avoir répondu  :)

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #3 le: Juillet 31, 2013, 05:52:53 pm »
L'ordre des bibliothèques est le bon.

Par contre tu as un MinGW-w64 4.8, je ne sais pas s'il est compatible avec les versions précompilées de SFML (normalement ça provoquerait un crash, pas des erreurs d'édition de liens, mais bon...). Au pire tu peux toujours essayer de recompiler SFML.
Laurent Gomila - SFML developer

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #4 le: Juillet 31, 2013, 06:52:02 pm »
Alors là je m'y attendais pas, mais tu avais raison Algue-Rythme, il faut bien placer le nom du fichier avant les options d'édition de lien. Donc maintenant ça compile, merci à toi  :D
Par contre déception à l'exécution, le programme crash avec le classique "test.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.". J'imagine que c'est le problème dont Laurent a parlé. Qu'est-ce qui fait que mon compilo n'est pas compatible avec les versions précompilées de SFML ?

Je vais essayer de compiler la SFML, mais je peux aussi changer de compilateur.

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #5 le: Juillet 31, 2013, 06:59:49 pm »
Citer
Qu'est-ce qui fait que mon compilo n'est pas compatible avec les versions précompilées de SFML ?
Ca peut être plein de choses !
Laurent Gomila - SFML developer

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #6 le: Juillet 31, 2013, 07:09:55 pm »
J'ai réussi à compiler la SFML avec CMake, par contre j'obtiens le même résultat en lançant l'exécutable. Je vous rassure, je l'ai recompilé en m'assurant qu'il aille chercher les include et les lib toutes neuves.
Donc voilà, je vais essayer de passer à mingw 4.7, ce sera suffisant pour être comptaible avec la version précompilée de SFML ?
Et au passage, est-ce que le type de gestion des threads et des exceptions par mingw a une importance ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #7 le: Juillet 31, 2013, 07:12:54 pm »
Citer
Donc voilà, je vais essayer de passer à mingw 4.7, ce sera suffisant pour être comptaible avec la version précompilée de SFML ?
Normalement oui... si tu prends la bonne version ;D

Citer
Et au passage, est-ce que le type de gestion des threads et des exceptions par mingw a une importance ?
Tout à fait, ce sont deux des points qui créent une incompatibilité entre versions.
Laurent Gomila - SFML developer

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #8 le: Juillet 31, 2013, 07:25:04 pm »
Citer
Donc voilà, je vais essayer de passer à mingw 4.7, ce sera suffisant pour être comptaible avec la version précompilée de SFML ?
Normalement oui... si tu prends la bonne version ;D

Le bonne version de mingw ou de SFML ? J'imagine que la bonne réponse est "les 2", mais pour la SFML je crois ne pas avoir trop le choix en utilisant mingw. Il reste donc la version du dit compileur, quelle sous-version de 4.7 dois-je choisir ?

Citer
Et au passage, est-ce que le type de gestion des threads et des exceptions par mingw a une importance ?
Tout à fait, ce sont deux des points qui créent une incompatibilité entre versions.

Ok. J'imagine que pour les exception c'est dwarf (ça expliquerais le DW2 dans le nom de la version précompilée de la SFML), mais qu'en est-il des threads ?

Et quelqu'un aurait une idée de pourquoi ça ne marche toujours pas en ayant recompilé la SFML ?

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #9 le: Juillet 31, 2013, 08:28:26 pm »
Citer
Le bonne version de mingw ou de SFML ? J'imagine que la bonne réponse est "les 2", mais pour la SFML je crois ne pas avoir trop le choix en utilisant mingw. Il reste donc la version du dit compileur, quelle sous-version de 4.7 dois-je choisir ?
Si tu prends MinGW sur son site officiel je pense que ce sera bon.

Citer
Ok. J'imagine que pour les exception c'est dwarf (ça expliquerais le DW2 dans le nom de la version précompilée de la SFML), mais qu'en est-il des threads ?
L'implémentation des threads peut être win32 ou posix. Les deux sont incompatibles.

Citer
Et quelqu'un aurait une idée de pourquoi ça ne marche toujours pas en ayant recompilé la SFML ?
A priori non, sauf si tu as fait quelque chose de travers de ton côté, mais ça je ne peux pas le savoir ;)
Laurent Gomila - SFML developer

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #10 le: Juillet 31, 2013, 09:13:06 pm »
Citer
Si tu prends MinGW sur son site officiel je pense que ce sera bon.

Je viens d'essayer, toujours le même problème à l'exécution  :'(
Pourtant g++ semble être à la bonne version cette fois :
Utilisation des specs internes.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/mingw/bin/../libexec/gcc/mingw32/4.7.2/lto-wrapper.exe
Target: mingw32
ConfigurÚ avec: ../gcc-4.7.2/configure --enable-languages=c,c++,ada,fortran,objc
,obj-c++ --disable-sjlj-exceptions --with-dwarf2 --enable-shared --enable-libgom
p --disable-win32-registry --enable-libstdcxx-debug --disable-build-poststage1-w
ith-cxx --enable-version-specific-runtime-libs --build=mingw32 --prefix=/mingw
ModÞle de thread: win32
gcc version 4.7.2 (GCC)

Citer
L'implémentation des threads peut être win32 ou posix. Les deux sont incompatibles.

Je suppose que tu voulais dire "compatibles" ?

Citer
A priori non, sauf si tu as fait quelque chose de travers de ton côté, mais ça je ne peux pas le savoir

Bah j'ai configuré/compilé avec CMake dans C:/Library/SFML-master/build.
Ensuite j'ai coupé/collé le dossier C:/Library/SFML-master/build/lib dans C:/Library/SFML-master.
Et pour finir je compile mon fichier avec :
g++ -IC:/Library/SFML-master/include -c main.cpp
g++ main.o -LC:/Library/SFML-master/lib -lsfml-graphics -lsfml-window -lsfml-system -o test

Je ne vois pas trop ce qui a pu mal se passer  :-\

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #11 le: Juillet 31, 2013, 09:42:24 pm »
Citer
Pourtant g++ semble être à la bonne version cette fois
En effet.

Citer
Je suppose que tu voulais dire "compatibles" ?
Bah non. "Incompatibles entre elles", au cas où ce n'était pas clair.

Citer
Je ne vois pas trop ce qui a pu mal se passer
Pas mieux :(
Laurent Gomila - SFML developer

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #12 le: Juillet 31, 2013, 09:52:14 pm »
Citer
Bah non. "Incompatibles entre elles", au cas où ce n'était pas clair.

Ah ok, dans ce cas on s'est mal compris depuis le début ;D
Je demandais avec quelle gestion des threads était compilé la SFML, mais j'imagine que c'est win32 vu que la version de mingw du site officiel est configurée comme ça.

Citer
Pas mieux  :(

Ah mince  :-\
Bon dans ce cas je vais essayer de tout reprendre de zéro, que ce soit pour mingw ou la SFML, en espérant que ce soit suffisant  :)

Jairard

  • Newbie
  • *
  • Messages: 23
    • Voir le profil
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #13 le: Juillet 31, 2013, 11:57:25 pm »
De retour, j'ai supprimé mingw et SFML, tout retéléchargé, installé proprement.
Que ce soit avec la SFML précompilée ou la SFML maison, j'ai toujours les mêmes symptômes. A savoir que la compilation se passe sans soucis mais le programme plante à l'exécution  >:(

Je ne vois vraiment pas quoi faire, ça doit sûrement être une erreur de ma part mais je ne vois pas ce que ça peut être, j'ai pourtant l'impression d'avoir tout fait comme il faut  :'(

En attendant de trouver une solution je vais donc retourner sous osx pour faire joujou  :P

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32504
    • Voir le profil
    • SFML's website
    • E-mail
Re : [windows] compilation en ligne de commande
« Réponse #14 le: Août 01, 2013, 08:05:32 am »
Essaye de lier SFML statiquement.
Laurent Gomila - SFML developer