Exe linux en exe windows (programme c++)

Signaler
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018
-
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
-
Bonjour à tous,
Je me tourne de nouveau vers vouscar ayant developpé pas mal de jeux en c++ sur linux, j'aimerais les exporter vers en exe windows.

Alors tous ces projets utilisent soit la sdl soit la sfml, comportent une fenetre qui s'ouvre, à l'interieur de laquelle le jeu se dessine, ils sont développés en c++, et j'utilise en Makefile pour compiler.

Comment faire pour exporter ce projet ?

Merci à tous pour votre aide qui je le sais, me sera encore une fois précieuse.


Cyril Z.

17 réponses

Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
Soit tu compiles tes sources directement sous Windows, soit tu génères un exécutable Windows sous Linux via de la cross compilation (regarde les "binutils").

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Merci pour ta réponse (encore une fois ^^).
Imaginons je prend la solution de compiler directement sous windows -> comment je fait pour compiler ? Dois-je prendre un EDI ? Si oui comment compiler autrement car je suppose que mon Makefile n'est pas compatible windows ?

Sinon comment on se sert d'un binutils ?
Mon exe sera-t-il compatible avec n'importe quel windows et n'importe quelle archi 32x ou 64x ? Faut-il avoir la sdl ou sfml sur windows aussi pour pouvoir executer le jeu ?

Merci d'avance


Cyril Z.
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Je pense finalement utiliser le binutils mais apres avoir vu cette doc :
http://doc.ubuntu-fr.org/tutoriel/compilation_croisee?s[]=binutils

je ne comprend pas.

Pouvez vous me donner un exemple pour produire un executable compatible pour windows32 ET 64 (en meme temps) et si possible linux32 ET 64 toujours dans le meme.

Cordialement,
Cyril Z.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
La solution la plus simple reste de prendre ton projet sous Windows, d'utiliser un EDI (Visual Studio Express par exemple), et de recompiler ton projet en utilisant le système de projet de l'EDI (le makefile sera ignoré).
La cross compilation est bien plus difficile à mettre en place, mais au final plus pratique à long terme.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Ahhhhh !!!! Ben que me conseille tu car j'ai deja 4 projets à convertir et j'en aurais au moins 2 de plus d'ici octobre ?

Sinon peux-tu répondre à ces 2 questions.
- Si je prend un nouvel EDI sous windows -> comment lui faire prendre en compte mes images et ma fenetre déclarée dans le code car j'avais déja essayé mais aucun résultat (fenetre au nom du projet, pas d'image, et fenetre blanche donc meme les shapes de la sfml ne fonctionnait pas)

- si je prend la compilation croisée, peux-tu me donner comme la procédure totale pour produire l'exe demandé plus haut (un exe au moins compatible sur windows 32 et 64 bits et au mieux windows 32/64 + linux 32/64)

Merci encore pour ton aide.


Cyril Z.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
Si tu as plein de projets, alors ouais la cross compilation c'est pratique :)

Un lien pas mal là dessus pour débuter:
http://algorithmique.net/Dev/2011/02/19/installer-un-environnement-de-cross-compilation.html

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Rhooooo, j'en ai marre. Ca fait 4h que j'y suis et rien ne marche.
Ton tuto est bien mais d'apres ce que j'ai compris c'est pour créer une exe de MAC vers Windows donc pour moi ce n'est pas bon vu que je suis sur ubuntu (linux).
Apres je suis allé voir ce tuto : http://www.dumbbell.fr/howto/win32-cross-compilation.fr.html#tests
mais je n'arrive pas a avoir les archives demandées pour minGW/ binutils et pour gcc.
DOnc j'ai fait sudo aptitude install mingw binutils gcc, mais apres pour les configurer comment on fait, je ne connais pas le repertoire d'installation.

A force de traifiquait j'ai réussit a faire un semblant de configuration (mais comment .... je ne sais pas), apres cette commade ("i686-pc-mingw32-ld -V") n'a pas fonctionnée et je n'ai pas eu pour gcc tout les "checking for i686".

Comment faire, si ce n'est pas trop demandé, peut-tu me donner un autre tuto ou m'en faire un petit ici en live avec lien vers les paquets précis à télécharger ).

Merci


Cyril Z.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
Je manque de temps, et ne pourrait te le faire maintenant.
Je jette un coup d'oeil là dessus ce soir.

Comme je te l'avais dit, une fois que c'est en place, c'est ultra pratique, mais c'est vraiment pas simple à faire la première fois :).

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Ok, c'est super sympa, ne te presse pas en tout cas, j'ai jusqu'au 13/14 juillet pour le faire.

Merci encore pour ta patience avec moi

Cyril Z.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
Solution simple (plus chiant à réaliser dans un makefile ou dans un projet Qt), testée sous Ubuntu 11.04:

sudo aptitude install mingw32


Ensuite pour compiler le fichier suivant (cross-test.cc):
#include 
int main()
{
  std::cout << "Hello world cross compiled !" << std::endl;
  return 0;
}


Compilation:
i586-mingw32msvc-g++ cross-test.cc


Générera un "a.exe" qui devrait fonctionner sous Windows.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

OK, bon j'ai preparer le fichier et compilé sous linux, mais bon la flemme de redemarrer sous windows donc je teste ca demain promis.

Sinon quelque question (pour que tu patientes ) :
- Comment faire en sorte que le fichier de sortie soit renomme autrement ?
- Comment utilisé cette méthode dans un makefile (donc plusieurs fichiers) ?
- Y-a-t-il besoin d'installer la sfml ou sdl sur windows pour que les projets utilisant la SDL ou la SFML fonctionnent sur Windows ? Si oui, une fois telechargé et installé, faut-il faire quelque chose de plus (indiquez le chemin à l'executable ? ....) ?
- L'executable sera t-il compatible avec un Windows x32 et x86 ?
- Faut-il ajouté quelque chose au projet pour que windows reconnaisse ma fenetre SFML ou SDL déclarée dans mon code et donc dans l'executable).

Voila, je pense que c'est tout. La nuit porte conseil, peut-etre que j'aurai d'autres questions demain .
Donc demain je teste tout ce et te tiens au courant dans tout les cas.

Encore merci


Cyril Z.
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Me revoila deja, j'ai voulu tant qu'a faire compiler un de mes projets utilisant la SFML mais la ......, voici quelques erreurs :

pour un .cc

‘sf’ has not been declared
‘Event’ was not declared in this scope
type ‘<type error>’ argument given to ‘delete’, expected pointer
‘RenderWindow’ was not declared in this scope
‘Sprite’ was not declared in this scope


pour un .h

‘Sprite’ does not name a type
‘Image’ does not name a type
‘Shape’ does not name a type
‘Font’ does not name a type
‘String’ does not name a type
‘Clock’ does not name a type
ISO C++ forbids declaration of ‘RenderWindow’ with no type


Une autre question au fait en plus de celles de tout à l'heure :
- COmment windows va retrouver mes ressources (images) comme linux ->

if (!_filtre_image.LoadFromFile("Ressources/Filtre.png"))
{
     _filtre_sprite = Sprite ();		
}
else
{
     _filtre_sprite = Sprite(_filtre_image);
     _filtre_sprite.Resize(_filtre.getSizeW(), _filtre.getSizeH());
     _filtre_sprite.SetPosition(_filtre.getPosX(), _filtre.getPosY());	
}


- et pour la declaration de la fenetre au fait ->
RenderWindow * _window = new RenderWindow(sf::VideoMode(w, h, 64), "Fenetre SFML", sf::Style::Close);
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
- Comment faire en sorte que le fichier de sortie soit renomme autrement ?

Comme pour une compilation "normale" avec gcc. Option "-o".

- Comment utilisé cette méthode dans un makefile (donc plusieurs fichiers) ?

Remplacer la variable de compilation par cet outil. Généralement en préfixant make par une variable d'environnement.
Genre: "CXX=i586-mingw32msvc-g++ make" au lieu de "make".

- Y-a-t-il besoin d'installer la sfml ou sdl sur windows pour que les projets utilisant la SDL ou la SFML fonctionnent sur Windows ? Si oui, une fois telechargé et installé, faut-il faire quelque chose de plus (indiquez le chemin à l'executable ? ....) ?

Aucune idée.

- L'executable sera t-il compatible avec un Windows x32 et x86 ?

Normalement oui, si tu génères un exécutable 32 bits, ça tournera aussi sous Windows 64 bits (il a un mode de compabilité intégré).

- Faut-il ajouté quelque chose au projet pour que windows reconnaisse ma fenetre SFML ou SDL déclarée dans mon code et donc dans l'executable).

Aucune idée aussi. Il va falloir que tu cherches de la doc sur le net, je connais très mal la SFML.

mais bon la flemme de redemarrer sous windows donc je teste ca demain promis.

Lance la avec Wine alors ! C'est généralement comme ça que l'on teste :p

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
- Faut-il ajouté quelque chose au projet pour que windows reconnaisse ma fenetre SFML ou SDL déclarée dans mon code et donc dans l'executable).

Je crois qu'il te faut la version Windows de la bibliothèque (une dll) et que tu les lies à la compilation.

- COmment windows va retrouver mes ressources (images) comme linux ->

Il va regarder dans le dossier courant. Je ne pense pas que le "/" soit gênant. Sinon, il te suffit de tester "/" ou "\" selon une option de compilation personnalisée.

- et pour la declaration de la fenetre au fait ->

Pas compris.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Bon avec une grande motivation (et mon film qui tourne sans moi ;-( ), j'ai demarré sous windows et je confirme que ton a.exe fonctionne sous windows.

Le gros bleme c'est qu'apres avoir changé le CXX du makefile (car au final j'y ai pensé avant ta réponse ^^), il m'a sortit les erreurs citées plus haut, donc je pense qu'a la compilation il se rend compte qu'il y a une librairie utilisée et qu'il ne comprend pas. Pourtant après avoir cherché sur la doc officielle apparemment il n'y a rien de différent.

Je continue a chercher, mais si jamais tu veux bien chercher et que tu trouve, je suis de toute ouie.

Merci, et je te tiens encore ou courant.


Cyril Z.
Messages postés
51
Date d'inscription
dimanche 8 août 2010
Statut
Membre
Dernière intervention
2 mars 2018

Je suis encore la avec ...... une question et une affirmation (cf site-du-zero et doc sfml) :
Affirmation : pas de différence entre sfml sur windows et linux
Question : comment lier les libs ou include à l'executables sur linux pour que la sfml linux se mette dans l'exe et que sur windows dès qu'il ouvre il a la sfml ?

et donc toujours la meme question pourquoi quand je compile mon projet utilisant la sfml sur linux il me donne ces erreurs :

pour un .cc

sf has not been declared
Event was not declared in this scope
type <type error> argument given to delete, expected pointer
RenderWindow was not declared in this scope
Sprite was not declared in this scope


pour un .h

Sprite does not name a type
Image does not name a type
Shape does not name a type
Font does not name a type
String does not name a type
Clock does not name a type
ISO C++ forbids declaration of ‘RenderWindow’ with no type



Cyril Z.
Messages postés
3833
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
11 juin 2021
124
Je pense qu'il faut que tu lies la SFML version Windows, avec ton binaire. S'il y a des dll pour Windows pour la SFML, essaie de les télécharger et mets les dans un dossiers. Il doit aussi y avoir des Headers qui vont avec, et il faut sûrement l'indiquer lors de la compilation.

Un lien intéressant:
http://stackoverflow.com/questions/5292073/problems-in-mingw-when-statically-linking-sfml-libraries

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question