GNU/Linux >> Linux の 問題 >  >> Linux

Linux から Windows ターゲットへのクロスコンパイル用に Qt を構成するにはどうすればよいですか?

Linux で Windows 用のソフトウェアをクロスコンパイルするもう 1 つの方法は、Archlinux の MinGW-w64 ツールチェーンです。使用と保守が簡単で、最新バージョンのコンパイラーと多くのライブラリーを提供します。個人的には MXE よりも簡単で、新しいバージョンのライブラリをより早く採用できるようです。

まず、arch ベースのマシンが必要です (仮想マシンまたは Docker コンテナーで十分です)。 Arch Linux である必要はありません。派生物でも同様です。私は Manjaro Linux を使用しました。MinGW-w64 パッケージのほとんどは、公式の Arch リポジトリでは入手できませんが、AUR にはたくさんあります。 Arch (Pacman) のデフォルトのパッケージ マネージャーは、AUR からの直接のインストールをサポートしていないため、yay や yaourt などの AUR ラッパーをインストールして使用する必要があります。その後、Qt5 と Boost ライブラリの MinGW-w64 バージョンをインストールするのは簡単です:

yay -Sy mingw-w64-qt5-base mingw-w64-boost
#yaourt -Sy mingw-w64-qt5-base mingw-w64-qt5-boost #if you use yaourt

これにより、MinGW-w64 ツールチェーン (mingw-w64-gcc) もインストールされます。 ) およびその他の依存関係。Windows (x64) 用の Qt プロジェクトのクロスコンパイルは次のように簡単です:

x86_64-w64-mingw32-qmake-qt5
make

プログラムをデプロイするには、/usr/x86_64-w64-mingw32/bin/ から対応する dll をコピーする必要があります。 .たとえば、通常は /usr/x86_64-w64-mingw32/lib/qt/plugins/platforms/qwindows.dll をコピーする必要があります program.exe_dir/platforms/qwindows.dll まで .

32 ビット バージョンを取得するには、i686-w64-mingw32-qmake-qt5 を使用するだけです。 代わりは。 Cmake ベースのプロジェクトは x86_64-w64-mingw32-cmake で簡単に動作します このアプローチは私にとって非常にうまく機能し、セットアップ、保守、および拡張が最も簡単でした。また、継続的な統合サービスにも適しています。利用可能な docker イメージもあります。

たとえば、QNapi 字幕ダウンローダー GUI を構築したいとします。 2 つのステップでそれを行うことができます:

<オール>
  • Docker コンテナを起動します:
  • sudo docker run -it burningdaylight/mingw-arch:qt /bin/bash
    
    1. QNapi のクローンとコンパイル
    git clone --recursive 'https://github.com/QNapi/qnapi.git' 
    cd qnapi/ 
    x86_64-w64-mingw32-qmake-qt5
    make
    

    それでおしまい!多くの場合、それは簡単です。独自のライブラリをパッケージ リポジトリ (AUR) に追加するのも簡単です。可能な限り直感的な PKBUILD ファイルを作成する必要があります。たとえば、mingw-w64-rapidjson を参照してください。


    (MXE は彼の回答から進化したため、これは @Tshepang の回答の更新です)

    Qt のビルド

    make qt を使用するのではなく Qt をビルドするには、MXE_TARGETS を使用できます ターゲット マシンとツールチェーン (32 ビットまたは 64 ビット) を制御します。 MXE は .static を使用して開始しました および .shared ビルドするライブラリのタイプを示すターゲット名の一部として。

    # The following is the same as `make qt`, see explanation on default settings after the code block.
    make qt MXE_TARGETS=i686-w64-mingw32.static   # MinGW-w64, 32-bit, static libs
    
    # Other targets you can use:
    make qt MXE_TARGETS=x86_64-w64-mingw32.static # MinGW-w64, 64-bit, static libs
    make qt MXE_TARGETS=i686-w64-mingw32.shared   # MinGW-w64, 32-bit, shared libs
    
    # You can even specify two targets, and they are built in one run:
    # (And that's why it is MXE_TARGET**S**, not MXE_TARGET ;)
    # MinGW-w64, both 32- and 64-bit, static libs
    make qt MXE_TARGETS='i686-w64-mingw32.static x86_64-w64-mingw32.static'
    

    @Tshepang の元の回答では、MXE_TARGETS を指定していませんでした。 であり、デフォルトが使用されます。彼が回答を書いた時点で、デフォルトは i686-pc-mingw32 でした 、今は i686-w64-mingw32.static です . MXE_TARGETS を明示的に設定した場合 i686-w64-mingw32 へ 、 .static を省略 、この構文は現在非推奨であるため、警告が出力されます。ターゲットを i686-pc-mingw32 に設定しようとすると 、MXE が MinGW.org (i686-pc-mingw32) のサポートを削除したため、エラーが表示されます。

    qmake を実行中

    MXE_TARGETS を変更したため 、<mxe root>/usr/i686-pc-mingw32/qt/bin/qmake コマンドが機能しなくなります。今、あなたがする必要があるのは:

    <mxe root>/usr/<TARGET>/qt/bin/qmake
    

    MXE_TARGETS を指定しなかった場合 、これを行います:

    <mxe root>/usr/i686-w64-mingw32.static/qt/bin/qmake
    

    更新: 新しいデフォルトは i686-w64-mingw32.static になりました


    M クロス環境 (MXE) を使用するだけです。プロセス全体から苦痛を取り除きます:

    • 入手:

      $ git clone https://github.com/mxe/mxe.git
      
    • ビルドの依存関係をインストールする

    • Windows 用の Qt、その依存関係、およびクロスビルド ツールをビルドします。これには、適切なインターネット アクセスが可能な高速マシンで約 1 時間かかります。ダウンロードは約 500 MB です。

      $ cd mxe && make qt
      
    • アプリのディレクトリに移動し、クロスビルド ツールを PATH に追加します。 環境変数:

      $ export PATH=<mxe root>/usr/bin:$PATH
      
    • Qt Makefile ジェネレーター ツールを実行してビルドします。

      $ <mxe root>/usr/i686-pc-mingw32/qt/bin/qmake && make
      
    • バイナリは ./release ディレクトリにあります:

      $ wine release/foo.exe
      

    注意事項 :

    • MXE リポジトリのマスター ブランチを使用します。開発チームからより多くの愛を得ているようです.

    • 出力は 32 ビットの静的バイナリで、64 ビット Windows で適切に動作します。


    わかりました。理解できたと思います。

    一部は https://github.com/mxe/mxe/blob/master/src/qt.mk および https://www.videolan.org/developers/vlc/contrib/src/qt4/rules.mak<に基づく/P>

    configure を (-xtarget などを使用して) 実行すると、「最初に」、構成してから「hosts」gcc を実行して、ローカル バイナリ ファイル ./bin/qmake を作成するように見えます

     ./configure -xplatform win32-g++ -device-option CROSS_COMPILE=$cross_prefix_here -nomake examples ...
    

    次に、通常の「make」を実行すると、mingw 用にビルドされます

      make
      make install
    

    そう

    <オール>
  • はい

  • msvcrt.dll (デフォルト) 以外のものを使用する必要がある場合のみ。他のものを使ったことがないので、確かなことはわかりません.

  • https://stackoverflow.com/a/18792925/32453 には、いくつかの構成パラメーターがリストされています。


  • Linux
    1. Linuxで静的IPアドレスを設定してネットワークを構成する方法

    2. XRDPを使用してWindowsからLinuxデスクトップにデスクトップをリモート接続する方法

    3. Linux サーバーから Windows クライアントに SCP する方法

    1. Linux から Windows 共有フォルダにアクセスする方法

    2. Linux、OS X、Windows 用の Travis CI テスト パッケージの作成方法

    3. Linux ボックスから Windows とインターネットを共有するにはどうすればよいですか?

    1. 母がWindowsからLinuxに切り替えるのをどのように手伝ったか

    2. Linuxデスクトップ用にOpenboxを設定する方法

    3. LinuxでWindows95を実行する方法