2010-04-10 2 views
4

Après avoir lu cet article http://lukast.mediablog.sk/log/?p=155 j'ai décidé d'utiliser mingw sous Linux pour compiler des applications Windows. Cela signifie que je peux compiler, tester, déboguer et publier directement à partir de Linux.Croix de compilation de MinGW sur Fedora 12 à Windows - fenêtre de la console?

J'ai piraté ce script de construction qui va compiler l'application et même l'empaqueter dans un fichier ZIP. Notez que j'utilise des builds de source pour QMake (saviez-vous que c'est supporté? Wow ...). Notez également que le script tirera automatiquement les DLL nécessaires. Voici le script pour vous tous internets à utiliser et d'abus:

#! /bin/sh 

set -x 
set -e 

VERSION=0.1 
PRO_FILE=blabla.pro 
BUILD_DIR=mingw_build 
DIST_DIR=blabla-$VERSION-win32 

# clean up old shite 
rm -fr $BUILD_DIR 
mkdir $BUILD_DIR 
cd $BUILD_DIR 

# start building 
QMAKESPEC=fedora-win32-cross qmake-qt4 QT_LIBINFIX=4 config=\"release\ quiet\" ../$PRO_FILE 
#qmake-qt4 -spec fedora-win32-cross 
make 

DLLS=`i686-pc-mingw32-objdump -p release/*.exe | grep dll | awk '{print $3}'` 
for i in $DLLS mingwm10.dll ; do 
    f=/usr/i686-pc-mingw32/sys-root/mingw/bin/$i 
    if [ ! -f $f ]; then continue; fi 
    cp -av $f release 
done 

mkdir -p $DIST_DIR 
mv release/*.exe $DIST_DIR 
mv release/*.dll $DIST_DIR 
zip -r ../$DIST_DIR.zip $DIST_DIR 

Les travaux binaires compilés sur la machine Windows7 je l'ai testé. Maintenant pour les questions:

  • Lorsque j'exécute l'application sur Windows, le thème n'est pas le thème Windows7. Je suppose qu'il me manque un module de style, je ne suis pas encore vraiment sûr.
  • L'application obtient une fenêtre de console pour une raison quelconque.

Le deuxième point (la fenêtre de la console) est critique. Comment puis-je supprimer cette fenêtre d'arrière-plan? S'il vous plaît noter que les lignes de configuration supplémentaires ne fonctionnent pas pour moi, qu'est-ce que je manque là?

Edit 1 (planification quelques-uns):

La ligne de compilation est:

i686-pc-mingw32-g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -o release/font_export.exe object_script.font_export.Release -L"/usr/i686-pc-mingw32/sys-root/mingw/lib" -lQtGui4 -lQtCore4 

Le commutateur -subsystem,windows est ajouté que lorsque "CONFIG + = fenêtres" et cela est ignoré dans d'autres systèmes d'exploitation. Ma conjecture est que le port de Qt MinGW est confus "Je cours sous Linux, j'ai besoin d'ignorer la configuration de Windows/console". Cela signifie que j'ai besoin d'éditer le fichier qmake.spec correspondant. arhg ... Je déteste les insectes. J'ai encore besoin de vérifier que cela résout le problème ....

Répondre

3

Je pense que votre problème de thème est te résultat d'un manque application manifest

La raison pour laquelle votre application obtient une console est simple. Les applications Windows sont disponibles en deux versions, Console et GUI. La différence est un peu dans l'en-tête PE de l'EXE. La valeur par défaut de GCC est de générer une application Console, et e8johan explique comment changer cela (-Wl, -subsystem, windows). Il y a aussi quelques duper avec des points d'entrée (GUI devraient utiliser WinMain(), et les applications de la console main()) mais MinGW should take care of that

2

Vous pourriez être en mesure de l'enlever en incluant -Wl,-subsystem,windows. This article montre comment, mais vous souhaitez remplacer -mwindows par -Wl,-subsystem,windows pour éviter d'utiliser une fonctionnalité obsolète de gcc.

Questions connexes