Mais sous Linux ça marche parfaitement pourtant![]()
Mais sous Linux ça marche parfaitement pourtant![]()
Tu veux dire sous Linux où pratiquement tout est compilé avec GCC?
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
boost et mon programme ont tous deux été compilés avec gcc sous Windows pourtant.
Mais pas le kernel de Windows.
Et surtout, pas la C Run-Time Library de Microsoft (MSVCRT.DLL) sur laquelle MinGW s'appuie.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Et après on se demande pourquoi Windows est continuellement trollée...
Donc je vais être obligé d'utiliser des codes de "retourner des exceptions" au lieu de les lancer![]()
Ce n'est pas la faute de Microsoft si GCC piggyback sur la bibliothèque runtime des compilateurs concurrents (ce qui n'est vraiment pas recommandé pour des raisons d'ABI).
Un des symptômes est visible parce que GCC et Microsoft n'utilisent pas la même taille de long double:
Code C : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #include <stdio.h> int main(void) { long double ld = 42.1234; printf("double: %d\n", (int)sizeof(double)); printf("long double: %d\n", (int)sizeof(long double)); printf("Valeur long double (%%Lf): %Lf\n", ld); return 0; }
Code sortie sous Visual : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double: 8 long double: 8 Valeur long double (%Lf): 42.123400
Code sortie sous MinGW : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 double: 8 long double: 12 Valeur long double (%Lf): -0.000000
Si MinGW ne faisait pas ça, ce serait son ABI de bout en bout, et ses exceptions pourraîent être propagées d'une DLL MinGW à l'autre... et ses long double s'afficheraient correctement.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Je viens de tester avec boost en link dynamic avec mingw 4.7.1 (tdm), aucun problème. Quel est ta version de compilateur ?
Edit: Fonction aussi avec mingw 4.7.2.
Version de boost : 1.53
Version de g++ :
Avec le code minimal donné par Flob90, toujours le même problème.Built by Equation Solution <http://www.Equation.com>.
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=c:/bin/gcc/bin/../libexec/gcc/i686-pc-mingw32/4.7.2/lto-wrapper.exe
Target: i686-pc-mingw32
Configured with: ../gcc-4.7.2-mingw/configure --host=i686-pc-mingw32 --build=x86_64-unknown-linux-gnu --target=i686-pc-mingw32 --prefix=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/gcc/4.7.2 --with-gcc --with-gnu-as --with-gnu-ld --with-cloog=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/cloog --with-gmp=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/gmp --with-mpfr=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/mpfr --with-mpc=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/mpc --enable-cloog-backend=ppl --with-sysroot=/home/gfortran/gcc-home/binary/mingw32/cross/x86_32/gcc/4.7.2 --disable-shared --disable-nls --disable-tls --disable-win32-registry --enable-libquadmath-support --enable-libquadmath --enable-languages=c,c++,fortran --enable-libgomp --enable-threads=win32 --enable-lto --enable-static --enable-shared=lto-plugin --enable-plugins --with-host-libstdcxx='-lstdc++ -lsupc++ -lm' --with-ppl=/home/gfortran/gcc-home/binary/mingw32/native/x86_32/ppl --enable-ld=yes
Thread model: win32
gcc version 4.7.2 (GCC)
Le problème venait du mingw que j'avais trouvé, apparemment il avait été compilé avec des options exotiques.
J'ai téléchargé le mingw officiel puis j'ai recompilé boost et je n'ai plus aucun problème, merci à vous tous.
Partager