Cross compiler l'application Qt pour Windows sur Linux avec liaison dynamique

pour se conformer à la licence LGPL de Qt, une application utilisant la bibliothèque Qt doit soit rendre le code source disponible, soit créer un lien dynamique avec Qt (si j'ai bien compris ces quelques mots).

donc j'aimerais créer une application source fermée faisant exactement cela. De plus, j'aimerais développer sur Linux (actuellement Xubuntu 12.04) en utilisant g++/MinGW avec le support C++11 pour créer des binaires windows. J'ai suivi ce guide utile pour accomplir ce dernier. Mais comme le guide indique également que les exécutables liés statiquement sont créés.

depuis que j'ai utilisé MXE pour télécharger et construire automatiquement la bibliothèque Qt (version 5.0), je n'ai pas eu beaucoup de chance d'influencer le processus. Ma question est donc de savoir comment créer des versions dynamiquement liées de la bibliothèque Qt et de ses applications respectives?

14
demandé sur Community 2013-01-29 01:37:36

4 réponses

mise à jour

maintenant, la meilleure façon de construire des versions dynamiques des bibliothèques avec MXE est de spécifier l'option' shared ' pour la chaîne d'outils:

make MXE_TARGETS=i686-w64-mingw32.shared qt5

origine

EDIT: j'ai créé un dépôt git où j'ai fait toutes les modifications nécessaires à MXE pour construire une version partagée de qtbase. Il est disponible à https://github.com/jeremysalwen/mxe. Pour construire, cloner le dépôt et puis exécutez 'make qtbase'. J'ai laissé mon post original en bas.

J'ai donc téléchargé l'environnement mxe et il semble que le code utilisé pour compiler qt soit de l'aide dans src/qt.mk

la procédure de base est de faire correspondre CE code avec les instructions standard pour construire qt. Si vous regardez à l'intérieur de qt.mk et qtbase.mk vous verrez qu'il est en fait assez simple, et essentiellement court ./configure, make, puis installe les fichiers générés. Si vous pouvez regarder cela, vous devriez être en mesure de faire correspondre instructions pour construire QT statiquement / dynamiquement et modifier qt.mk pour qu'il corresponde aux directions dynamiques.

dans tous les cas, je pense que j'ai trouvé le problème. Il semble que la différence soit le drapeau "- static " lors de la compilation de qt. Donc si nous enlevons simplement le drapeau "- static " qui est passé à ./ configurer dans qt.mk et qtbase.mk, Je m'attendais à ce que mxe construise alors une version QT dynamique. Bien sûr, vous pourriez avoir besoin de changer d'autres choses, mais j'espère que c'est tout ce que vous devez faire.

9
répondu Jeremy Salwen 2015-10-19 08:06:00

tout d'abord, vous avez besoin d'avoir le vin setup.

sudo apt-get install wine

télécharger Qt5 Windows MinGW SDK Exécuter avec le vin

wget http://releases.qt-project.org/qt5/5.0.1/qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe
wine qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe

suivez L'assistant Installer Qt. Puis

cd ~/.wine/drive_c/Qt/Qt5.0.1/Tools/QtCreator/bin
wine qtcreator.exe

j'ai essayé les exemples dans qtcreator, il se compile et fonctionne bien sous linux, et quand je copie le fichier exe sur une machine windows avec Qt configuré, il fonctionne aussi bien.

bien sûr, un inconvénient est que vous ne vous sentez pas natif en utilisant qtcreator et le compilateur en utilisant vin. Je ne sais pas si c'est beaucoup plus lent comparé au binaire linux natif. Mais jom est disponible et vous pouvez utiliser plusieurs noyaux pour compiler si votre projet est si grand.

pour utiliser jom au lieu de make dans qtcreator, modifiez ici dans qtcreator.

projects > Build & Run > Build > Build Steps > Make

remplacer par jom et ajouter make arguments-j n Où N est le nombre de base que vous voulez utiliser.

4
répondu Min Lin 2013-04-01 06:18:21

j'ai trébuché récemment et j'ai trouvé un certain succès avec La Fourche d'octave de mxe. Il s'est donné la peine de construire qt avec shared (.dll) le soutien de bibliothèque qui a satisfait mes besoins. Voici un lien vers son post.

2
répondu Greg Pazo 2013-03-27 21:49:59

vous devez construire QT pour la liaison dynamique. Si vous avez QT construit pour la liaison statique (généralement .un fichiers sous linux) de votre binaire sera statique. Si vous construisez contre des fichiers d'objets partagés (.ainsi, sous linux, votre binaire sera dynamiquement lié. Vous aurez également besoin d'inclure Le pertinent .dll est avec votre application donc quand quelqu'un d'autre exécute l'exécutable il a accès à ces bibliothèques.

le Qt SDK de qt-project.org inclut les fichiers dynamiquement liés.

0
répondu drew212 2013-02-20 06:02:27