<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://doc.qtfr.org/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Documentation Qtfr - cross-compilation</title>
  <link>http://doc.qtfr.org/</link>
  <description>La documentation francophone sur Qt</description>
  <language>fr</language>
  <pubDate>Thu, 03 Sep 2009 16:42:30 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Cross Compilation Native d'application Qt depuis Linux/Unix Like</title>
    <link>http://doc.qtfr.org/post/2007/04/10/Cross-Compilation-Native-dapplication-Qt-depuis-Linux</link>
    <guid isPermaLink="false">urn:md5:9fc40305e2bec2c5a8e6026f8ffa58fd</guid>
    <pubDate>Sat, 14 Apr 2007 10:01:00 +0200</pubDate>
    <dc:creator>P@sNox</dc:creator>
        <category>Installation</category>
        <category>cross-compilation</category><category>installation</category><category>Linux</category>    
    <description>&lt;ul&gt;
&lt;li&gt;Qu'est ce que la cross compilation&amp;nbsp;?&lt;/li&gt;
&lt;li&gt;Comment créer un executable pour une architecture différente&amp;nbsp;?&lt;/li&gt;
&lt;li&gt;Comment créer un exécutable Windows sous Linux&amp;nbsp;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Un compilateur croisé (en anglais &lt;a href=&quot;http://fr.wikipedia.org/wiki/Compilateur&quot; hreflang=&quot;fr&quot;&gt;cross compiler&lt;/a&gt;.) est un programme capable de traduire un code source en code objet ayant un environnement d'exécution (architecture matérielle, système d'exploitation) différent de celui où la compilation est effectuée. Ces compilateurs sont principalement utilisés en informatique industrielle.&lt;/p&gt;


&lt;p&gt;Cet article va detailler la mise en place et l'utilisation d'un environnement de compilation multi plateforme.
En effet, tout le monde n'a pas Windows dans sa poche ( et heureusement :D ), et fournir un executable pour une architecture autre que la sienne peut parfois etre un vrai calvaire.&lt;br /&gt;
Aussi à travers de ce tutoriel, nous allons mettre un place un tel systeme en utilisant mingw32 et Qt4.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Version&lt;/strong&gt;&amp;nbsp;: Qt4 (supérieur ou égal à Qt 4.0, peut etre valable pour n'importe quelle autre librairie) &lt;br /&gt;
&lt;strong&gt;Auteur&lt;/strong&gt;&amp;nbsp;: Filipe Azevedo (&lt;a href=&quot;http://forum.qtfr.org/profile.php?id=352&quot;&gt;pasnox&lt;/a&gt;)&lt;br /&gt;
&lt;strong&gt;Test&lt;/strong&gt;&amp;nbsp;: Kubuntu Feisty 7.04 beta (Qt 4.2.3)&lt;/p&gt;    &lt;h3&gt;Pré-requis&lt;/h3&gt;


&lt;p&gt;Le but de ce tutoriel est de montrer comment compiler une application Qt 4 pour Windows depuis Linux.
Nous aurons donc besoin d'installer les logiciels suivant&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mingw32 (disponible normalement dans les paquets de votre distribution, il aura pour effet d'installer en plus les paquets suivant&amp;nbsp;: &lt;code&gt;mingw32-binutils&lt;/code&gt; et &lt;code&gt;mingw32-runtime&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Wine (pour ensuite tester votre application Windows sous Linux)&lt;/li&gt;
&lt;li&gt;Une installation correcte de Qt 4 pour Windows version mingw&lt;/li&gt;
&lt;li&gt;Une installation correcte de Qt 4 pour Linux&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;Installation des paquets (système basé sur debian)&lt;/h3&gt;


&lt;p&gt;La façon la plus simple d'installer mingw32 et Wine est d'ouvrir une console (ou bien un gestionnaire de paquet, tel &lt;em&gt;Adept&lt;/em&gt;) et d'y inscrire les commandes suivante&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ sudo apt-get install mingw32
pasnox@pasnox-desktop:~$ sudo apt-get install wine
&lt;/pre&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;nbsp;: les commandes d'installation de paquet ci contre ne sont valables que pour debian/ubuntu/kubuntu, ou tout systeme basé sur debian, veuillez vous réferrer à la documentation de votre distribution linux le cas échéant.&lt;/p&gt;&lt;/blockquote&gt;



&lt;h3&gt;Installation de Qt 4 Windows&lt;/h3&gt;


&lt;p&gt;Maintenant que nous avons installé Wine, nous pouvons installer la &lt;a href=&quot;http://www.trolltech.com/developer/downloads/qt/windows&quot; hreflang=&quot;en&quot;&gt;version Windows de Qt 4&lt;/a&gt; qui utilise mingw (par exemple la version &lt;a href=&quot;http://www.trolltech.com/download?target=ftp://ftp.trolltech.com/qt/source/qt-win-opensource-4.2.3-mingw.exe&quot; hreflang=&quot;en&quot;&gt;4.2.3&lt;/a&gt;)
Une fois téléchargé, pour l'installer, veuillez ouvrir une console et taper&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ wine chemin/de/qt/pour/windows/qt-win-opensource-4.2.3-mingw.exe
&lt;/pre&gt;


&lt;p&gt;Je vous conseille d'installer la librairie Qt dans un dossier dont le chemin ne contient pas d'espace, par exemple&amp;nbsp;: &lt;strong&gt;C:\Development\Qt\4.2.3&lt;/strong&gt; (chemin qui sera utilisé par la suite).&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Attention&lt;/strong&gt;&amp;nbsp;: il n'est pas nécessaire d'installer mingw depuis l'installateur, même si celui-ci vous dit qu'il ne le trouve pas.&lt;/p&gt;&lt;/blockquote&gt;



&lt;h3&gt;Configuration de Wine&lt;/h3&gt;


&lt;p&gt;Maintenant que Qt 4 pour Windows est installé, il faut indiquer à Wine où trouver les librairies Qt.
Il s'agit en fait de modifier la base de registres, car les variables d'environnement ne sont pas accessibles.
Pour ce faire, exécuter le logiciel &lt;em&gt;Wine RegEdit&lt;/em&gt;.&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ wine regedit
&lt;/pre&gt;


&lt;p&gt;Rendez-vous dans la clé &lt;code&gt;&lt;strong&gt;HKEY_CURRENT_USER&lt;/strong&gt;&lt;/code&gt;.
Si la clé &lt;code&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/code&gt; n'existe pas, veuillez la créer en faisant clique droit sur la clé &lt;code&gt;&lt;strong&gt;HKEY_CURRENT_USER&lt;/strong&gt;&lt;/code&gt;, puis nouvelle clé.&lt;br /&gt;
Dans cette clé ( &lt;code&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/code&gt; ), la valeur nommé &lt;code&gt;&lt;strong&gt;PATH&lt;/strong&gt;&lt;/code&gt; devrait s'y trouver .
Si celle-ci n'existe pas créez là&amp;nbsp;: clique droit sur la clé &lt;code&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/code&gt; puis nouvelle valeur chaine.&lt;br /&gt;
Nommez-la &lt;code&gt;&lt;strong&gt;PATH&lt;/strong&gt;&lt;/code&gt; et donnez lui la valeur du chemin d'installation des exécutables de Qt, c'est à dire &lt;code&gt;&lt;strong&gt;C:\Development\Qt\4.2.3\bin&lt;/strong&gt;&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://doc.qtfr.org/public/2007/wine_regedit.png&quot;&gt;&lt;img src=&quot;http://doc.qtfr.org/public/2007/.wine_regedit_s.jpg&quot; alt=&quot;Wine RegEdit&quot; style=&quot;display:block; margin:0 auto;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Parfait, il manque maintenant une dll, celle-ci se nomme &lt;code&gt;&lt;strong&gt;mingwm10.dll&lt;/strong&gt;&lt;/code&gt; et est disponible depuis les paquets installés. Pour ne pas être embêté, nous allons la copier dans le dossier &lt;code&gt;&lt;strong&gt;system32&lt;/strong&gt;&lt;/code&gt; de Wine, ce qui permettra d'executer des applications mingw depuis Wine plus facilement.&lt;/p&gt;


&lt;p&gt;Ouvrez une console et tapez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ gunzip -c /usr/share/doc/mingw32-runtime/mingwm10.dll.gz &amp;gt; ~/.wine/drive_c/windows/system32/mingwm10.dll
&lt;/pre&gt;


&lt;p&gt;Vous disposez maintenant d'une version de Wine prête pour l'exécution d'application Qt 4.&lt;/p&gt;



&lt;h3&gt;Création d'un mkspec&lt;/h3&gt;


&lt;p&gt;Pour pouvoir compiler notre application, il va nous falloir créer un nouveau mkspec basé sur celui de &lt;em&gt;win32-g++&lt;/em&gt;.
Copiez donc le contenu grâce à la commande suivante (&lt;code&gt;/usr/share/qt4&lt;/code&gt; est le répertoire d'installation par défaut des paquets Qt4 sous distribution à base de Debian)&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ sudo cp -r /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++
&lt;/pre&gt;


&lt;p&gt;On a donc maintenant un nouveau mkspec nommé &lt;strong&gt;win32-x-g++&lt;/strong&gt; basé sur &lt;em&gt;win32-g++&lt;/em&gt;.
Il faut remplacer quelques variables contenues dans le fichier &lt;code&gt;&lt;strong&gt;qmake.conf&lt;/strong&gt;&lt;/code&gt; de ce nouveau mkspec, toujours dans la console tapez&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ sudo kate /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf
&lt;/pre&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;nbsp;: Vous pouvez utiliser autre chose que &lt;strong&gt;kate&lt;/strong&gt; comme éditeur de texte.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Les variables à remplacer sont en fait les compilateurs  C et C&lt;code&gt;++&lt;/code&gt; ( gcc et g++ ) ainsi que les commandes DOS.&lt;/p&gt;


&lt;p&gt;Voici les variables a modifier&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
QMAKE_CC		= i586-mingw32msvc-gcc
QMAKE_CXX		= i586-mingw32msvc-g++
QMAKE_INCDIR		= /usr/i586-mingw32msvc/include
QMAKE_INCDIR_QT		= ~/.wine/drive_c/Development/Qt/4.2.3/include
QMAKE_LIBDIR_QT		= ~/.wine/drive_c/Development/Qt/4.2.3/lib
QMAKE_LINK		= i586-mingw32msvc-g++
# N'oubliez pas le -mwindows a la fin pour éviter d'avoir une console dans vos applications
QMAKE_LFLAGS		= -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
# les commande DOS sont à remplacer par les commandes shell unix
#isEqual(MINGW_IN_SHELL, 1) {
	QMAKE_DIR_SEP		= /
	QMAKE_COPY		= cp
	QMAKE_COPY_DIR		= cp -r
	QMAKE_MOVE		= mv
	QMAKE_DEL_FILE		= rm -f
	QMAKE_MKDIR		= mkdir -p
	QMAKE_DEL_DIR		= rm -rf
#} else {
# Vous pouvez effacer la partie else qui ne sert a rien, ainsi que le isEqual du dessus
#}
# Enlever les .exe des executables
QMAKE_MOC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc
QMAKE_UIC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic
QMAKE_IDC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
QMAKE_RCC               = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}rcc
QMAKE_LIB		= i586-mingw32-ar -ru
QMAKE_RC                = i586-mingw32msvc-windres
QMAKE_STRIP             = i586-mingw32msvc-strip
&lt;/pre&gt;


&lt;p&gt;Une fois terminée, vous êtes enfin prêt à compiler votre application pour windows :)&lt;/p&gt;


&lt;p&gt;Pour ce faire vous utiliserez le mkspec &lt;strong&gt;win32-x-g++&lt;/strong&gt; lors de l'apelle à &lt;em&gt;qmake&lt;/em&gt;&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ qmake-qt4 -spec win32-x-g++ &amp;amp;&amp;amp; make
&lt;/pre&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;nbsp;: Il semblerait que sous mac, il faille ajouter la platforme à la ligne de commande qmake&amp;nbsp;: &lt;strong&gt;-win32&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Une fois compilée, l'application se trouve dans le dossier &lt;code&gt;release&lt;/code&gt; en cas de compilation release, ou bien dans le dossier &lt;code&gt;debug&lt;/code&gt; ( vous aurez besoin de compiler Qt en debug pour cela )&lt;/p&gt;


&lt;p&gt;Pour lancer l'application grace à Wine&amp;nbsp;:&lt;/p&gt;

&lt;pre&gt;
pasnox@pasnox-desktop:~$ wine release/mon_application.exe
&lt;/pre&gt;


&lt;p&gt;Il est à noter que le binaire aura besoin, tout comme une compilation via mingw32 sous Windows, des dll Qt (au minimum de QtCore pour une application console, et QtCore/QtGui pour une application graphique simple) ainsi que de &lt;code&gt;mingwm10.dll&lt;/code&gt;.&lt;/p&gt;


&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;nbsp;: Pour supprimer la dépendance aux dlls de Qt, il est nécessaire de compiler Qt4 Windows en version statique, mais c'est un problème qui n'est pas traité ici... peut-être plus tard.&lt;/p&gt;&lt;/blockquote&gt;


&lt;p&gt;Bonne cross compilation&amp;nbsp;!&lt;/p&gt;


&lt;h3&gt;Autres sources&lt;/h3&gt;

&lt;p&gt;Vous trouverez ici d'autres informations sur la cross-compilation ici&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://forum.qtfr.org/viewtopic.php?id=2007&quot; hreflang=&quot;fr&quot;&gt;Cross-compilation C++/QT4&lt;/a&gt; sur le forum, par &lt;a href=&quot;http://forum.qtfr.org/profile.php?id=907&quot;&gt;Amalsek&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dumbbell.fr/howto/win32-cross-compilation.fr.html&quot; hreflang=&quot;fr&quot;&gt;Cross-compilation vers un environnement Win32&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://silmor.de/29&quot; hreflang=&quot;en&quot;&gt;Cross compiling Qt/Win Apps on Linux&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>