記事の目的
Linux for Windows x32 / x64 / static / sharedのクロスコンパイルシステムを取得し、ライトバージョンのQt 5.4.1の説明時に後者をビルドするドキュメント(4つの目的のため)。 私自身、深く尊敬され、社会のために。
予定
多くの開発者は、Qtフレームワークを使用してアプリケーションを開発するには、* nix(特にLinux)を使用する方が望ましいという結論に達しました。 そして、これには理由があります。 Qtは元々、autotool、make、perlなどのnixツールに焦点を当てていました...そして、2番目のポイント、nixesには素晴らしいツールがあります-valgrind、Windowsポートではまだ見ていません。 最後の理由:さまざまなターゲットプラットフォーム用のアプリケーションを作成するためのツールセットを1か所で用意しておくと便利です。
Qt5のライトバージョンを選ぶ理由
Qtフレームワークにはモジュール構造がありますが、残念ながら完全ではありません。 外部ライブラリへの依存関係の中には、これらのライブラリを必要とするモジュールではなく、Qt5Coreで「ハング」するものがあります。 言い換えれば、このライブラリが必要かどうか-配布キットから取り出してください。 この例は、「モンスター」
-ICUライブラリです。 重量はほぼ25メートルです! 前述したように、依存関係はQt5Coreでハングします...しかし、そのモジュールQt5WebKitにはそれが必要です(少なくとも私の場合、99%のケースでは基本的に使用されていません)。 何してるの? カットしてカット。 Qt5のフルバージョンを入手したいですか? これについては結論で言及します。 行こう
0.ビルドスクリプト
すべての手順を順番に実行します。 中間の「人間」の制御が必要なため、すべてのスクリプトを組み合わせてシリアルアセンブリにしないことをお勧めします。 さまざまなLinuxディストリビューション、さまざまなランタイム、ツールキット...簡単なアルゴリズム:次のステップに進み、エラーがないことを確認して、次のステップに進みました。 したがって、スクリプト自体:
- 1.事前準備
- 2. MXEクロスコンパイル環境のインストール
- 3. Qt 5.4.1をダウンロードして構成する
- 4. 4つの目的のためのQt 5.4.1キットの組み立て(件名を参照)
- 5. QtCreatorで収集された登録
1.事前準備
Linuxディストリビューションがインストールされています。 実稼働コンピューター(ライブLinux上ではない)でこれらすべてを実行することをお勧めしますが、仮想マシンにインストールします。 たとえば、VMWareを使用していますが、これは好みの問題です。 Linuxディストリビューションの選択も好みの問題です。 個人的には、
Gentoo Linuxを好みます。実際、このキッチン全体をその下に設定します。 セットアップに問題がある場合は、このテーマに関する短い記事
「VMWare用Linux Gentooのインストールと構成」を参照してください。
だから、あなたはLinuxを設定して
いて
、ルートの下で働いて
いません! さらに作業を進めるには、次のインストール済みパッケージの存在を確認するか、再インストールする必要があります。
$ sudo emerge \ app-arch/bzip2 \ app-arch/unzip \ app-arch/xz-utils \ app-shells/bash \ dev-lang/ruby \ dev-libs/libffi \ dev-libs/openssl \ dev-perl/XML-Parser \ dev-util/cmake \ dev-util/intltool \ dev-util/pkgconfig \ dev-util/scons \ dev-vcs/git \ sys-devel/autoconf \ sys-devel/automake \ sys-devel/bison \ sys-devel/flex \ sys-devel/gettext \ sys-devel/libtool \ sys-devel/patch \ net-misc/ntp \ www-client/lynx
それ以降のインストールはすべて、
$ HOME / devディレクトリで行われます。 ある場合は、名前を変更するか、後で提供されるスクリプトを慎重に編集します。 ダウンロードした外部ファイル/スクリプト/ライブラリを使用したすべての操作では、
$ HOME / setupディレクトリが使用されます。 $ HOME / devに関する上記のすべてのコメントは、このディレクトリにも有効です。
2. MXEクロスコンパイル環境のインストール
MXEについての予備的なコメント。 これは優れたクロスコンパイルツールチェーンビルドシステムです。 しかし、1つの「しかし」があります。 現在、安定したブランチはありません。 とりあえず、作者はgitリポジトリに2つのブランチ(安定版と「開発版」)を保持しました。 これで、ブランチがマージされました。 開発は非常に活発に行われています-変更は1〜3日でほぼ破棄されます。 そして、これは「アセンブリは機能しているが機能していない」という事実に満ちています。 私にとって重要ないくつかのライブラリ、特にPostgreSQLのクライアント部分は、エラーなしでビルドされますが、動作しません。 明示的な浅瀬を調査せずに1週間過ごしました。 これらの「欠陥」を修正します。 だから:
$ mkdir -p $HOME/setup $ cd $HOME/setup $ wget http://majestio.tk/stuff/setup-scripts.tar.xz $ tar -xf setup-scripts.tar.xz $ rm -f setup-scripts.tar.xz
$ HOME / setupディレクトリにある次の一連のスクリプトを取得する必要があります。
3.1.build-qt-x32-shared.sh 3.2.build-qt-x32-static.sh 3.3.build-qt-x64-shared.sh 3.4.build-qt-x64-static.sh スクリプトには、単にセキュリティ上の理由で「実行可能な」属性がありません-「意図しない偶発的な」起動を防ぐためです。 最初のスクリプト
1.setup-first.shを実行します。 $ HOME / dev ...サブディレクトリ構造を作成し、mxeクロスコンパイルシステムをデフレートし、gccツールチェーンをダブルビルドして(posix-threadsのサポートを提供する)、メインベースライブラリをアセンブルし、PostgreSQLライブラリのクライアント部分にパッチを当ててアセンブルします。
重要: ABIのホストシステムが「x86_64-pc-linux-gnu」と異なる場合は、スクリプトのABIパッチを手動で削除してください。 「#パッチファイル定義ABI MXEプロジェクト」というコメントを探しています。 あなたのものを書いてください。
$ sh 1.setup-first.sh
3. Qt 5.4.1をダウンロードして構成する
スクリプト
2.setup-qt5.shを実行します。 そのタスクは、Qt 5.4.1ソースをダウンロードし、qt5 /サブディレクトリに展開し、必要なソースにパッチを適用することです。
$ sh 2.setup-qt5.sh
4. 4つの目的でQt 5.4.1キットを構築する
4種類のQt 5.4.1の実際のアセンブリでは、残りのスクリプトが意図されています。
- 3.1.build-qt-x32-shared.sh
- 3.2.build-qt-x32-static.sh
- 3.3.build-qt-x64-shared.sh
- 3.4.build-qt-x64-static.sh
起動は、前の段落と同じ方法で実行されます。
$ sh
ただし、アセンブリの時間を節約できる重要なポイントがあります。 マルチコアコンピューターを使用している場合、アセンブリを並列で実行するのが理にかなっています。 これを行うには、2番目(3番目、4番目)のターミナルを開き、ターミナルで次のスクリプトを実行します。 個人的には、追加のsshクライアントですべてのアクションを実行すると便利です。 実践で示したように、Core i7(4コア、ハイパートレーディング)では、2つの並列アセンブリで合計ビルド時間が増加しています。 さらに-生産性は向上しませんが、ほとんどの場合低下します。
したがって、4つのスクリプトはすべて機能しました。 その結果、何が得られましたか?
$ HOME / dev / cross / mxe / usr / bin-4つのツールチェーンすべての実行可能モジュールを示します
$ HOME / dev / cross / mxe / usr / toolchain-ツールチェーンのヘッダーとライブラリはここに収集されます
$ HOME / dev / stuff / assembly-後続のクロスコンパイルのために、すべての種類のQtがここに収集されます
これをすべて使用するために接続することが残っています。
5. QtCreatorで収集された登録
Linux用にQt 5.4.1を自分でダウンロードし(
x32または
x64にリンク)、自分でインストールします。 パフォーマンスを確認してください。
その後、収集したものを登録します。 QtCreatorを開き、メインメニューの[ツール]►[オプション]►[ビルドと実行]を選択します。 さらに、すべての登録には3つのステップが含まれます。
1)コンパイラーの登録(タブ「コンパイラー」)
2)Qtプロファイルの登録(タブ「Qtプロファイル」)
3)セットの登録(ブックマーク「セット」)
ステップ1
別のコンパイラを追加する場合、「特殊」タイプを選択します。 $ HOME / dev / cross / mxe / usr / binでbla-bla-bla-g ++のような必要なコンパイラを探しています。 以下に、/ usr / bin / makeなどのmakeシステムユーティリティへのパスを示します。 次に、ABIを設定します。 静的バージョンを選択した場合は、下部にmkspecを追加します-「win32-g ++。Static」(引用符なし)。 残りのフィールドは重要ではありません。 4種類すべてのコンパイラを登録し、[適用]をクリックします
ステップ2
[Qtプロファイル]タブに切り替えます。 プロファイルを追加して、$ HOME / dev / stuff / bla-bla-bla / bin / qmakeで探します。 4つのプロファイルをすべて登録し、「適用」をクリックします
ステップ3
「キット」タブに切り替えます。 目的のコンパイラ+ Qtプロファイルを選択して、次のキットを追加します。 手順1のようにmkspecを登録するために静的アセンブリが望ましいキット。 4セットすべてを登録し、「適用」をクリックします
おわりに
収集されたものに特定のエラーが含まれている可能性があることを完全に認識しています QtやPostgreSQLの作者、あるいはMXEプロジェクトの参加者でさえありませんでした。 また、単体テストは言うまでもなく、アセンブリ中の単純なチェックの欠如は、行われたことの「湿気」に気付いていることを示唆しています。 しかし、この一連のツールチェーンを受け取った後、プロジェクトをテストしました。例はQt配信からのものです。 興味のあるモジュール(UI、PostgreSQL、http、QtScript、その他多数)にエラーは見つかりませんでした。
...完全なアセンブリについて約束しました。 非常に幸運で、興味のある時点でMXEが安定した状態にある場合、完全なアセンブリを取得するのは非常に簡単です。
$ mkdir -p $HOME/dev/{cross,src,stuff,projects} $ cd $HOME/dev/cross $ git clone https://github.com/mxe/mxe.git $ make MXE_TARGETS='x86_64-w64-mingw32.shared' gcc -j4 JOBS=4 $ make MXE_TARGETS='x86_64-w64-mingw32.static' gcc -j4 JOBS=4 $ make MXE_TARGETS='i686-w64-mingw32.shared' gcc -j4 JOBS=4 $ make MXE_TARGETS='i686-w64-mingw32.static' gcc -j4 JOBS=4
ワン、87.14%の確率でこのビルドオプションに失望していますが、すべてが妨害がない場合、結果のQt5アセンブリは
$ HOME / dev / cross / mxe / usr / <toolchain> / qt5に配置されますみんなに良いコーディング。