代码之家  ›  专栏  ›  技术社区  ›  Jens A. Koch

如何在Linux for Windows上与MinGW交叉编译?

  •  7
  • Jens A. Koch  · 技术社区  · 10 年前

    我正在尝试用MinGW为Linux上的Windows编译一个Qt5应用程序。

    我正在使用Travis CI获取两个windows可执行文件(win32、win64)的连续构建。

    我已经建立了一个构建矩阵,其中包含不同MinGW依赖关系的定义。这个 before-install 部分定义了Qt、MinGW和gcc依赖关系。在 install .

    这是我的 .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
    

    生成失败。

    的输出 make 包含

     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.
    

    发现:这是QCheck B 公牛

    我不确定,如果我得到了Qt5的正确版本。

    构建可执行文件需要哪些更改?

    1 回复  |  直到 10 年前
        1
  •  11
  •   muesli    10 年前

    首先,确保您拥有 明w32 , 明w32二进制 mingw32运行时 已安装程序包。运行时包包含交叉编译所需的所有常见Windows标头,如缺少的“Windows.h”。

    还要注意,您正在尝试使用Qt库的Linux版本进行交叉编译。这将在链接阶段失败。您需要所需的所有依赖项的mingw32版本(.DLL)。

    由于Travis还没有提供mingw32 Qt包,您必须从第三方源安装它们(请参见 http://docs.travis-ci.com/user/installing-dependencies/ )喜欢 https://launchpad.net/~tobydox/+ppa-packages