2015-01-26 5 views
5

Ich versuche, eine Qt5-Anwendung für Windows unter Linux mit MinGW zu kompilieren.Wie kompiliert man mit MinGW unter Linux für Windows?

Ich benutze Travis-CI, um fortlaufende Builds von zwei ausführbaren Windows-Dateien zu erhalten (win32, win64).

Ich habe eine Build-Matrix eingerichtet, die die Definition der verschiedenen MinGW-Abhängigkeiten enthält. Der Abschnitt before-install definiert die Qt-, MinGW- und gcc-Abhängigkeiten. Die Pakete werden während install geholt.

Das ist mein .travis.yml:

language: cpp 
    matrix: 
fast_finish: true 
include: 
    # cross-compile using mingw 
    - compiler: ": w64" 
    env: PLATFORM="mingw32" ARCH="x86_64" BITSIZE=64 HOST="x86_64" 
    - compiler: ": w32" 
    env: PLATFORM="mingw32" ARCH="x86" BITSIZE=32 HOST="i686" 

install: 
    - sudo add-apt-repository --yes ppa:beineri/opt-qt54     # < Qt 
    - sudo add-apt-repository --yes ppa:tobydox/mingw-x-precise   # < MinGW 
    - sudo apt-get update -qq 
    - uname -m 
    - sudo apt-get install qt54base qt54imageformats qt54tools -y -qq 
    - export QTDIR=/opt/qt54 
    - export PATH=$QTDIR/bin:$PATH 
    - export LD_LIBRARY_PATH=$QTDIR/lib/:$QTDIR/lib/`uname -m`-linux-gnu:$LD_LIBRARY_PATH 
    - sudo apt-get install -y cloog-isl mingw32 
    - if [ $BITSIZE == 32 ]; then sudo apt-get install -y mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime; fi 
    - if [ $BITSIZE == 64 ]; then sudo apt-get install -y mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime; fi 
    - export MINGW=/opt/mingw$BITSIZE 
    - export PATH=$MINGW/bin:$PATH 
    - export CC=$HOST-w64-mingw32-gcc 
    - export CXX=$HOST-w64-mingw32-g++ 

script: 
    - qmake -v 
    - qmake wpnxm-servercontrolpanel.pro CONFIG+=release QMAKE_CC=$CC QMAKE_CXX=$CXX 
    - gcc -v 
    - gcc -dumpmachine 
    - export CMAKE_OPTS="-DUSE_WERROR=ON" 
    - make -j2 VERBOSE=1 

Der Build fehlschlägt.

Der Ausgang des make enthält

i686-w64-mingw32-g++ -c -pipe -O2 -std=c++0x -D_REENTRANT -Wall -W -fPIE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -I/opt/qt54/mkspecs/linux-g++ -I. -I/opt/qt54/include -I/opt/qt54/include/QtWidgets -I/opt/qt54/include/QtGui -I/opt/qt54/include/QtNetwork -I/opt/qt54/include/QtCore -I. -I. -o mainwindow.o src/mainwindow.cpp 
src/mainwindow.cpp:1:0: warning: -fPIC ignored for target (all code is position independent) 
/* 
^ 
src/mainwindow.cpp:41:21: fatal error: QCheckbox: No such file or directory 
#include <QCheckbox> 
        ^
compilation terminated. 

Fand heraus: es ist QCheck B Ochse.

Ich bin mir nicht sicher, ob ich die richtige Version von Qt5 holen.

Welche Änderungen sind erforderlich, um die ausführbaren Dateien zu erstellen?

Antwort

5

Zunächst einmal sicher, dass Sie die mingw32, mingw32-binutils und mingw32-runtime Pakete installiert haben. Das Laufzeitpaket enthält alle gängigen Windows-Header, die Sie für das Cross-Compiling benötigen, wie das fehlende "windows.h".

Beachten Sie auch, dass Sie Cross-Compiling mit einer Linux-Version der Qt-Bibliothek versuchen. Dies wird während der Verbindungsstufe fehlschlagen. Sie benötigen Mingw32-Versionen (.DLLs) aller Abhängigkeiten, die Sie benötigen. (Siehe http://docs.travis-ci.com/user/installing-dependencies/)

Da Travis nicht mingw32 Qt-Pakete noch zur Verfügung stellen, Sie werden sie von einem Dritten Quelle wie https://launchpad.net/~tobydox/+ppa-packages

müssen installieren