2015-01-26 11 views
5

Sto provando a compilare un'applicazione Qt5 per Windows su Linux con MinGW.Come eseguire la compilazione incrociata con MinGW su Linux per Windows?

Sto utilizzando Travis-CI per ottenere build continue di due file eseguibili di Windows (win32, win64).

Ho impostato una matrice di build, che contiene la definizione delle diverse dipendenze MinGW. La sezione before-install definisce le dipendenze Qt, MinGW e gcc. I pacchetti vengono recuperati durante install.

Questo è il mio .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 

La compilazione fallisce.

L'uscita del make contiene

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. 

scoperto: è QCheck B bue.

Non sono sicuro, se prendo la versione corretta di Qt5.

Quali modifiche sono necessarie per creare gli eseguibili?

risposta

5

Prima di tutto, assicuratevi di avere la mingw32, mingw32-binutils e mingw32-runtime pacchetti installati. Il pacchetto di runtime contiene tutte le intestazioni di Windows comuni necessarie per la compilazione incrociata, ad esempio "windows.h" mancante.

Inoltre, si sta tentando di eseguire la compilazione incrociata utilizzando una versione Linux della libreria Qt. Questo fallirà durante la fase di collegamento. Sono necessarie le versioni mingw32 (.DLL) di tutte le dipendenze necessarie.

Dal Travis non offrono ancora mingw32 pacchetti Qt, sarà necessario installarli da una fonte di terze parti (vedi http://docs.travis-ci.com/user/installing-dependencies/) come https://launchpad.net/~tobydox/+ppa-packages

Problemi correlati