[C/C++] Porter programme C++ (lib SDl, compilé sous cmake) sous windows(visual c++)

Le côté programmation du développement d'un jeu vidéo.

Porter programme C++ (lib SDl, compilé sous cmake) sous windows(visual c++)

Messagepar picky25 » 20 Mar 2013, 20:55

Bonjour a tous,

Etant en licence informatique (Besancon:00000013: ) j'avais comme projet la création d'un jeu s'inspirant du célèbre doodle jump, en C++ et avec les lib SDL (SDL, SDL_ttf, SDL_mixer).
J'ai donc créé ce jeu, un bon ptit jeu :00000020:

Maitenant, j'aimerais le porter sous windows pour pouvoir le distribuer à mes amis :00000014:
On m'a parlé de cmake pour le porter plus facilement, j'ai donc compiler sous cmake sans probleme.
J'ai également installé visual c++ express sous windows, et telechargé les lib SDL que j'ai mise dans visual.
Que dois-je faire maintenant? Peut-on executer le jeu (compiler cmake) sous windows? Dois-je le recompiler avant? Sous cmake, ou repartir du code source dans visual? Comment creer un point exe? etc

Merci!
:00000001:
picky25
 

Messagepar remram44 » 21 Mar 2013, 04:23

Sous Windows, tu as le choix entre utiliser Visual C++ ou MinGW (qui est un port des outils GNU (gcc...) pour Windows). Cette seconde solution est peut-être une bonne idée si tu utilisais ces mêmes outils sous Linux...

Concernant CMake, c'est une bonne idée mais n'a pas de rapport direct avec le portage. Qu'utilisais-tu précédemment sous Linux ?


La compilation se déroule de la même manière sous Windows que sous Linux : à partir des sources, via un build system (comme CMake, des Makefiles, un simple script, les autotools, SCons ou ce que tu veux) et un compilateur (comme GCC/G++ ou Visual Studio) tu aboutis à un fichier exécutable (ELF, généralement sans extension, sous Linux, ou .exe sous Windows).

L'exécutable Linux ne marchera pas sous Windows, il faut un .exe à tes amis. De la même manière, le .exe ne marchera pas sous Linux (à moins d'utiliser WINE, qui est plutôt efficace).

Note qu'il est également possible de construire un exécutable Linux depuis Windows (en utilisant GCC, inhabituel), ou un exécutable Windows depuis Linux (via MinGW), c'est ce qu'on appelle la cross-compilation ; regarde si tu trouves mingw dans les dépôts de ta distribution.
Cordialement, remram44.
Avatar de l’utilisateur
remram44
Hello World, I'm new !
 
Messages: 687
Inscription: 27 Juil 2005, 16:18
Localisation: New York City, NY, USA

Messagepar picky25 » 23 Mar 2013, 20:57

Merci de ta réponse,

------------------------------------------------------

Alors j'ai d'abord essayé de compiler sous windows en recréant un makefile (avec cmake) sous le compilateur visual, mais j'ai des erreurs de libs SDL qui ne trouve pas, et j'arrive pas a corriger, je sais pas ou les mettre sachant que cmake utilise des fonction find pour trouver les lib automatiquement:
mon fichier CMakeList est:

cmake_minimum_required(VERSION 2.6)
# Nom du projet
project(doodle)

# Déclaration de l'exécutable
add_executable(
jeu
menu.cpp
jeu.h
jeu.cpp
)

FIND_PACKAGE(SDL REQUIRED)
FIND_PACKAGE(SDL_ttf REQUIRED)
FIND_PACKAGE(SDL_mixer REQUIRED)

include_directories(${SDL_INCLUDE_DIR}
${SDLTTF_INCLUDE_DIR}
${SDLMIXER_INCLUDE_DIR})

target_link_libraries(
jeu
${SDL_LIBRARY}
${SDLTTF_LIBRARY}
${SDLMIXER_LIBRARY}
)


----------------------------------------------------

Puis j'ai tenté la cross compilation sous linux pour creer un .exe. J'ai installé le compilateur MinGw sur ce site très bien fait :http://www.shadoware.org/post/cross-compilation-compiler-un-programme-pour-ms-windows-sous-gnu-linux
J'ai réussi a compiler un programme simple de test via cmake puis a l'executer comme ceci :00000018: :

# mkdir build
# cd build
# cmake -DCMAKE_C_COMPILER=i586-mingw32msvc-gcc -DCMAKE_CXX_COMPILER=i586-mingw32msvc-g++ ../
# make



Le probleme c'est que cette compilation ne marche pas sur mon prog car elle ne va pas rechercher les lib SDL (c'est le # make qui affiche les erreurs)

Avez vous une idée de comment faire? J'ai rien trouvé de semblable sur le net.

Merci Beaucoup :00000001:
picky25
 

Messagepar picky25 » 23 Mar 2013, 21:11

Enfin j'ai dis une betise, les chemins vers la bibli SDL existent puisqu'il y 'a dans le dossier du programme le fichier CMakeList.
Mais erreur a la compilation, il ne trouve pas les fonctions SDL de mon fichier principal 'menu.cpp' ..
picky25
 

Messagepar teto » 25 Mar 2013, 14:57

Quelqu'un qui est suffisamment compétent pour compiler un programme avec des librairies via cmake sous linux devrait pouvoir y arriver sous windows.
Je ne connais pas suffisamment cmake pour t'aiguiller avec mais comment as-tu développé sous linux ? avec vim ? As-tu déjà essayé CobeBlocks ? il marche sous linux & windows, du coup le même projet te permettrait de générer un executable sur chaque plateforme d'où tu lances codeblocks.
Avatar de l’utilisateur
teto
 
Messages: 1168
Inscription: 26 Juil 2005, 19:02
Localisation: /home/Paris

Messagepar remram44 » 27 Mar 2013, 21:35

Je suis assez d'accord, tu devrais utiliser la même chose pour Windows que tu as utilisé sous Linux. Tu n'as pas besoin de CMake pour faire un projet portable... personnellement j'essaie de me contenter de Makefiles.

Concernant la cross-compilation, tu dois installer les headers/libs de SDL version Windows dans les répertoires de ton cross-compilateur, comme tu as du le faire pour les headers/libs de SDL version Linux dans les répertoires de ton compilateur.
Pour moi, sous Debian, ces dossiers sont dans /usr/i586-mingw32msvc après avoir installé le paquet mingw32.
Cordialement, remram44.
Avatar de l’utilisateur
remram44
Hello World, I'm new !
 
Messages: 687
Inscription: 27 Juil 2005, 16:18
Localisation: New York City, NY, USA

Probleme résolu

Messagepar 25picky » 08 Avr 2013, 19:55

Merci a tous,:00000025:
Je crois que mon compte à été supprimé pour je ne sais quelle raison, enfin bref je tiens a clore a discussion en expliquant comment j'ai résolu le problème

Finit la cross compilation, ou la génération de makefile avec Cmake, je suis simplement passé par visual c++ express
J'ai créer un projet à partir de code source déjà existant, puis j'ai inserer les .h de SDL, SDL_ttf et SDL_mixer dans le dossier include de visual (VC/include/SDL). Un fois fait, il faut ajouter les lib au projet, c'est a dire: :00000023:
-clik droit sur projet, propriété-> propriété de configuration-> editeur de lien -> entrée, puis ajouter SDL_main.lib, SDL.lib, SDL_ttf.lib, SDL_mixer.lib dans la premiere ligne (un truc genre ajouter nouvelle lib extérieur). Il faut donc que ces fichier soit donc le répertoire visual studio/VC/lib. (On télécharge les .h, .lib et .dll sur le site SDL) :00000026:

Apres vient tout les problème lié au bibli Windows comme unistd.. a chercher
puis générer projet, compiler et executer(ctrl + f5). Si ça marche on vient de compiler en debug, on voit apparaître un dossier debug dans notre dossier de projet avec un exécutable dedans. On distribue pas un projet en debug, mais en release. donc propriété du projet, et on met release en haut. On recompile, le tour est joué, il suffit de mettre tous les .dll dans le dossier release pour pouvoir exécuter le projet en double clickant sur l’exécutable. :00000023:


J'ai toutefois encore deux petit problème a régler, mais je devrait me débrouiller en cherchant. 1- Windows aime pas les fonction strcat et fprintf car on peux rentrer du code malicieux dans les chaîne, et avast gueule à l’exécution. :00000020:
2- Mon programme compilé n'a pas de son, j'utilise SDL_mixer, le son marche sur linux et je n'ai pas modifié le code source. Aucune erreur est détectée, et les libs sont bien là. Ce n'est pas mon ordi le problème, peut être visual c++? :00000021:

Je mettrai surement un lien de téléchargement quand il sera prêt.
Enfin voila, problème résolu, merci :00000025:
25picky
Hello World, I'm new !
 
Messages: 1
Inscription: 08 Avr 2013, 19:31


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 13 invités

cron