1. ホーム
  2. linux

[解決済み] Qt を Linux から Windows にクロスコンパイルするにはどのように設定すればよいですか?

2023-05-10 22:57:40

質問

Linux x86_64 ホストマシンを使用して Windows x86_64 ターゲット用に Qt ライブラリ (そして最終的には私のアプリケーション) をクロスコンパイルしたいです。私は近くにいるように感じていますが、このプロセスのいくつかの部分について根本的な誤解をしているかもしれません。

私は Fedora マシンにすべての mingw パッケージをインストールすることから始め、次に win32-g++ qmake.conf ファイルを私の環境に合うように修正しました。しかし、Qt 用のいくつかの一見明白な configure オプションで行き詰っているようです。 -platform-xplatform . Qt のドキュメントでは -platform はホストマシンアーキテクチャ(コンパイルする場所)、そして -xplatform はデプロイしたいターゲットプラットフォームです。私の場合は -platform linux-g++-64-xplatform linux-win32-g++ ここで、linux-win32-g++は私が修正したwin32-g++の設定です。

私の問題は、これらのオプションで configure を実行した後、クロス コンパイラー (x86_64-w64-mingw32-gcc) ではなく、私のシステムのコンパイラーが起動されることです。もし私が -xplatform オプションを省略し -platform をターゲット仕様 (linux-win32-g++) に設定すると、クロスコンパイラが起動しますが、Unix関連の関数が定義されていないことがわかるとエラーになります。

以下は、私の最新の試みからの出力です。 http://pastebin.com/QCpKSNev .

質問です。

  1. Qt for Windows のようなものを Linux ホストからクロスコンパイルする場合、ネイティブ コンパイラは これまで を呼び出すべきでしょうか? つまり、クロスコンパイルプロセス中に のみ を使うべきではありませんか?Qtのconfigureスクリプトが、私のシステムのネイティブコンパイラーを呼び出そうとする理由がわかりません。 -xplatform オプションを指定したときに、Qt の configure スクリプトが私のシステムのネイティブコンパイラを起動しようとする理由がわかりません。

  2. mingw クロス コンパイラーを使用している場合、いつ specs ファイルに対処しなければならないのでしょうか。GCC の spec ファイルは、私にとってまだ謎のようなものなので、ここでのいくつかの背景が私を助けてくれるのではないかと思っています。

  3. 一般的に、私の qmake.conf でクロス コンパイラーを指定すること以外に、私は何を考慮する必要がありますか?

どのように解決するのですか?

ただ Mクロス環境(MXE) . これは、すべてのプロセスから苦痛を取り除きます。

  • 手に入れる。

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

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

    $ 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 リポジトリの master ブランチを使用します; それは開発チームからより多くの愛を受けているようです。

  • 出力は32ビットの静的バイナリで、64ビットのWindowsでうまく動作するでしょう。