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