Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/11/2008, à 19:16

matt11

[RESOLU] Compilation croisé avec MingW32

Bonjour,

J'essaye de compiler un programme depuis ubuntu en executable pour windows avec MingW32.
En fait j'ai suivi ce tuto : http://doc.ubuntu-fr.org/tutoriel/comment_utiliser_mingw32_pour_faire_des_executables_windows

Dans mon programme j'utilise la librairie gmp donc quand je compile normalement j'utilise cette commande :

g++ -o test main.cpp -lgmpxx -lgmp

Et ça marche parfaitement. Mais quand je veux compiler mon programme pour windows j'utilise cette commande mais ça ne marche pas :

i586-mingw32msvc-g++ -o test.exe main.cpp -lgmpxx -lgmp

et j'obtient le message suivant :

main.cpp:14:19: error: gmpxx.h: Aucun fichier ou dossier de ce type
main.cpp:17: error: ‘mpz_class’ does not name a type
main.cpp: In function ‘int main(int, char**)’:
main.cpp:25: error: ‘gmp_randstate_t’ was not declared in this scope
main.cpp:25: error: expected `;' before ‘alea’
main.cpp:27: error: ‘mpz_class’ was not declared in this scope
main.cpp:27: error: expected `;' before ‘p’
main.cpp:28: error: expected `;' before ‘q’
main.cpp:29: error: expected `;' before ‘N’
main.cpp:30: error: expected `;' before ‘M’
main.cpp:31: error: expected `;' before ‘C’
main.cpp:32: error: expected `;' before ‘U’
main.cpp:33: error: expected `;' before ‘PGCD’
main.cpp:34: error: expected `;' before ‘resultat’
main.cpp:35: error: expected `;' before ‘caractere’
main.cpp:44: error: ‘p’ was not declared in this scope
main.cpp:45: error: ‘q’ was not declared in this scope
main.cpp:46: error: ‘N’ was not declared in this scope
main.cpp:47: error: ‘M’ was not declared in this scope
main.cpp:48: error: ‘C’ was not declared in this scope
main.cpp:49: error: ‘U’ was not declared in this scope
main.cpp:50: error: ‘PGCD’ was not declared in this scope
main.cpp:71: error: ‘alea’ was not declared in this scope
main.cpp:71: error: ‘gmp_randinit_mt’ was not declared in this scope
main.cpp:72: error: ‘gmp_randseed_ui’ was not declared in this scope
main.cpp:73: error: ‘mpz_urandomb’ was not declared in this scope
main.cpp:77: error: ‘mpz_nextprime’ was not declared in this scope
main.cpp:95: error: ‘mpz_gcd’ was not declared in this scope
main.cpp:99: error: ‘Bezout’ was not declared in this scope
main.cpp:125: error: ‘caractere’ was not declared in this scope
main.cpp:127: error: ‘resultat’ was not declared in this scope
main.cpp:127: error: ‘mpz_powm’ was not declared in this scope
main.cpp:151: error: ‘caractere’ was not declared in this scope
main.cpp:153: error: ‘resultat’ was not declared in this scope
main.cpp:153: error: ‘mpz_powm’ was not declared in this scope
main.cpp:154: error: ‘mpz_get_ui’ was not declared in this scope
main.cpp: At global scope:
main.cpp:187: error: ‘mpz_class’ does not name a type

C'est à cause de la librairie qui n'est pas trouver. Comment résoudre le problème ?

Merci d'avance.
Cordialement.

Dernière modification par matt11 (Le 20/11/2008, à 18:38)

Hors ligne

#2 Le 16/11/2008, à 19:27

nicolas66

Re : [RESOLU] Compilation croisé avec MingW32

Indiques au compilateur où se trouve les headers avec l'option `-I'.


"The computer was born to solve problems that did not exist before." (B. Gates)

Hors ligne

#3 Le 16/11/2008, à 21:38

rniamo

Re : [RESOLU] Compilation croisé avec MingW32

je crois (à vraiment vérifier) qu'il faut utiliser les librairies windows pour cross croiser....donc pas de -lgmp.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#4 Le 17/11/2008, à 08:23

robrob

Re : [RESOLU] Compilation croisé avec MingW32

Oui il te faut d'abord cross compiler la bibliothèque sous Mingw32 (*.a) pour pouvoir l'utiliser sous Mingw32. Tu ne peux évidement pas utiliser les biblis natives linux (*.so) sous Mingw32.

Pour cross compiler wxwidgets, j'avais utilisé quelque chose du genre:

./configure --prefix=/usr/i586-mingw32msvc/ --host=i586-mingw32msvc [etc...]
make
sudo make install

Le prefix c'est le répertoire d'installation, je l'ai fait pointer sur le répertoire de mingw32. Le [etc...] fait référence à des options spécifiques de la bibli, donc sans intérêt ici. Tu devrais pouvoir faire quelque chose de similaire avec gmp.

Dernière modification par robrob (Le 17/11/2008, à 08:26)

Hors ligne

#5 Le 18/11/2008, à 20:13

matt11

Re : [RESOLU] Compilation croisé avec MingW32

Ok merci j'ai installé la biblihothèque sous Mingw32 comme tu me l'a indiquer et ça compile maintenant.

Mais j'ai un autre problème : lorsque je teste le programme sous Windows il me met un message d'erreur (un message d'erreur avec envoyer le rapport ou ne pas envoyer) au lancement du programme.

C'est bizard ? Avez-vous une idée sur ce qui peut provoquer ceci ?

Hors ligne

#6 Le 19/11/2008, à 10:46

philou8237

Re : [RESOLU] Compilation croisé avec MingW32

faut que tu débogue, sans message explicite, on ne peut pas t'aider.

Hors ligne

#7 Le 19/11/2008, à 14:42

matt11

Re : [RESOLU] Compilation croisé avec MingW32

Comment on débogue en compilant sous Mingw32 ?

Hors ligne

#8 Le 19/11/2008, à 14:50

LittleJawa

Re : [RESOLU] Compilation croisé avec MingW32

J'avais trouvé ce tutoriel, plutôt bien fait, sur la compilation MingW32 en utilisant Code::Blocks :

http://forums.codeblocks.org/index.php/ … 343.0.html


Même si tu n'utilises pas Code::Blocks, tu dois pouvoir en tirer des infos intéressante sur la partie debug : utiliser Wine pour lancer ton applis, et "insight" pour lancer le debugger.

Je ne l'ai pas (encore) mis en pratique de mon côté, mais plusieurs personnes semblent l'avoir fait (d'après le forum de Code::Blocks).

Hors ligne

#9 Le 19/11/2008, à 17:41

matt11

Re : [RESOLU] Compilation croisé avec MingW32

Mais en fait mon programme s'exécute parfaitement sous Linux donc je ne pense pas qu'il y ait des bugs. Qu'en pensez-vous ?

Hors ligne

#10 Le 19/11/2008, à 23:05

LittleJawa

Re : [RESOLU] Compilation croisé avec MingW32

Ohla, méfiance wink
Le fait que ça tourne sous un OS ne signifie pas qu'il n'y a pas de bug. Vu que les librairies et le système en dessous sont différents, tu as des timing différents et des résultats de fonctions potentiellement différents aussi. Tout un tas de raisons pour que tu te retrouves dans des portions de codes que tu n'as jamais testées avant (genre : gestion d'erreur, ou synchronisation de threads). Le truc typique lors d'un portage.

Par ailleurs, vu que l'OS est différents, tu as peut-être des choses à faire sous Windows que tu n'as pas besoin de faire sous Linux, ou que tu dois faire différemment. Donc dans l'ensemble, oui, ton code est le même et tu es à peu près sûr qu'il marche. Mais dans le détail, tu as autant besoin de débugger l'un que l'autre.

La seule chose que te permet MingW32, c'est de pouvoir tout faire depuis un seul poste de développement, en changeant un minimum de code... mais ce qu'il y a en-dessous, ça reste la runtime microsoft, et elle, elle n'est pas forcément identique à ce que tu avais sous Linux (en fait, on SAIT qu'elle est différente).

Si tu ne tiens pas à débugger avec gdb, tu peux commencer par le faire à l'ancienne, genre avec des logs (printf ou autre) pour cerner le moment où ça plante et avoir une idée de la portion de code incriminée. Et si tu sais que ça marche sous Linux, essaie de voir à quel moment ton code diverge (genre : si tu as eu besoin d'appeler des API spécifique à windows (socket, thread...), ou à faire un truc spécial pour cet OS (charger la librairie winsock...), c'est un bon candidat pour ton plantage).
Le fait que tu ais eu besoin de recompiler gmp est aussi inquiétant : le bug vient peut-être de là. Peut-être que cette lib fait des choses qu'elle doit faire différemment si on la veut sous windows... ça, ce serait le pire scénario, parce que ça veut dire que tu vas devoir te taper le code de gmp pour comprendre ce qui se passe exactement sad Enfin avec un peu de chance, d'autres que toi auront eut le même problème pour le coup.

En dehors de ça, je ne sais pas trop quoi te conseiller...

Hors ligne

#11 Le 19/11/2008, à 23:12

rniamo

Re : [RESOLU] Compilation croisé avec MingW32

T'as qu'un netbook ? sinon virtualise XP c'est plus simple et efficace.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#12 Le 19/11/2008, à 23:21

LittleJawa

Re : [RESOLU] Compilation croisé avec MingW32

rniamo a écrit :

T'as qu'un netbook ? sinon virtualise XP c'est plus simple et efficace.

En quoi est-ce que ça l'aide à débugger ou même à compiler ?
Même sous un XP normal, il faudra bien qu'il comprenne d'où vient le plantage... A moins que tu suggères qu'il se procure VisualStudio (express, c'est gratuit) et recompile sont programme avec ?

Hors ligne

#13 Le 20/11/2008, à 08:03

robrob

Re : [RESOLU] Compilation croisé avec MingW32

Je pense qu'il faut commencer par vérifier que la chaîne de compilation est ok. Regarde si un code simple (avec gmp) compile et fonctionne correctement.

Ensuite pour le débug, 2 possibilités:
- avec mingw-gdb sous windows*
- avec des printf (ou std::cout) big_smile

Sinon tu peux essayer de lancer ton programme sous wine. Si le comportement est similaire à celui constaté sous windows (à quelques petits bugs cosmétiques près c'est souvent le cas), ça t'évitera d'installer une machine virtuelle ou de redémarrer sous windows pour tester le programme.

*En installant mingw sous windows, je ne pense pas que l'on puisse cross-debugger une application tongue

Hors ligne

#14 Le 20/11/2008, à 08:20

LittleJawa

Re : [RESOLU] Compilation croisé avec MingW32

robrob a écrit :

[...]*En installant mingw sous windows, je ne pense pas que l'on puisse cross-debugger une application tongue

heu... je crois que j'ai raté un truc.

MingW permet de faire des binaires windows... donc si on l'installe sous windows, on obtient des binaires windows, qu'on peut débugger sous windows... Jusque là, je suis.

MingW sous Linux permet de faire des binaires windows, qu'on peut ensuite lancer sous wine et debugger avec mingW-gdb (voir l'URL que j'ai posté plus haut). Ca, ça va encore, même si je ne l'ai pas testé personnellement, et qu'on a des chances de se heurter à des problème de compatibilité Wine.

Mais pourquoi parles-tu d'installer MingW sous Windows pour cross-debugger ? C'est sûr que ça peut pas être "cross" puisque le résultat est un binaire Win32...

J'ai l'impression d'être à la masse hmm

Hors ligne

#15 Le 20/11/2008, à 12:17

robrob

Re : [RESOLU] Compilation croisé avec MingW32

Je voulais dire: "en installant mingw sous linux"

Fort logiquement, il faut soit passer par wine (qui marche quand même étonnement bien) soit par windows (en virtualisant ou non).

Bon c'est vrai qu'entre le mingw linux et mingw windows c'est un peu confus tout ça tongue

Hors ligne

#16 Le 20/11/2008, à 12:26

LittleJawa

Re : [RESOLU] Compilation croisé avec MingW32

robrob a écrit :

Je voulais dire: "en installant mingw sous linux"

Fort logiquement, il faut soit passer par wine (qui marche quand même étonnement bien) soit par windows (en virtualisant ou non).

Bon c'est vrai qu'entre le mingw linux et mingw windows c'est un peu confus tout ça tongue

Oki smile
C'est ce que j'avais fini par me dire aussi. J'ai été long à la détente, désolé tongue

Hors ligne

#17 Le 20/11/2008, à 14:54

matt11

Re : [RESOLU] Compilation croisé avec MingW32

Merci pour toutes ces réponses.

Tout d'abord pour tester mes programme j'ai un pc sous windows à coté donc il n'y a pas de problème de virtualisation ou d'utilisation de wine.

Ensuite j'ai testé un programme basique utilisant gmp et cross compilé à partir de mingw (Linux) et il marche bien sous windows. Donc je vais essayer de trouver le problème de mon programme en utilisant des cout.

Des que j'ai trouvé le problème je vous tient informé.

Dernière modification par matt11 (Le 20/11/2008, à 15:03)

Hors ligne

#18 Le 20/11/2008, à 15:48

rniamo

Re : [RESOLU] Compilation croisé avec MingW32

si tu veux faire un programme pour windows, fait le sous windows. La compilation croisée est compliquée avec des librairies extèrieures.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#19 Le 20/11/2008, à 18:38

matt11

Re : [RESOLU] Compilation croisé avec MingW32

En fait j'avais fais des bétises dans mon code et c'est normal qu'il ne fonctionner pas sous windows mais alors c'est bizard qu'il ai fonctionné sous Linux ...

Bon le problème est résolu. Merci à tous pour votre aide.

Hors ligne