【问题标题】:How to cross-compile with MinGW on Linux for Windows?如何在 Linux for Windows 上使用 MinGW 进行交叉编译?
【发布时间】:2015-03-25 04:07:59
【问题描述】:

我正在尝试使用 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.

发现:是 QCheckBox。

我不确定,如果我获取正确版本的 Qt5。

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

【问题讨论】:

    标签: linux mingw qt5 cross-compiling travis-ci


    【解决方案1】:

    首先,确保您已安装 mingw32mingw32-binutilsmingw32-runtime 软件包。运行时包包含交叉编译所需的所有常见 Windows 头文件,例如缺少的“windows.h”。

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-13
      • 1970-01-01
      • 2022-01-03
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多