このミニ記事では、win32プラットフォーム用にQtアプリケーションをクロスコンパイルする1つの方法について説明します。
友達を始めましょう
まず、ネイティブQt SDK(Linux用)をダウンロードしてインストールします。
または、コンソールで実行します:
wget get.qt.nokia.com/qtsdk/qt-sdk-linux-x86-opensource-2010.04.binQt SDK Linuxを「/ home / caiiiycuk / qt-cross / qt-linux」フォルダーに入れたので、パスに注意してください。
chmod 777 qt-sdk-linux-x86-opensource-2010.04.bin
./qt-sdk-linux-x86-opensource-2010.04.bin
次の段階はおそらく最も問題の多いものです。ターゲットプラットフォーム(ウィンドウ)用にコンパイルされたQtライブラリを取得する必要があります。 2つのオプションがあります:ソースからのクロスコンパイルを使用してコンパイルするか(私の意見では非常に難しいでしょう)。 いずれかのwin-machineにQt SDKを配置してから、父をQtからネイティブシステムに慎重に転送します。 2番目の方法で行ったところ、Qt SDK for Windowsはdaddy / home / caiiiycuk / qt-cross / qt-winに落ち着きました。
では、Windowsコンパイル環境をセットアップしましょう。 Ubuntuリポジトリからmingwコンパイラーをインストールします。
sudo apt-get install mingw32インストールの最後に、i586-mingw32msvc- *ツールキットが利用可能になります。これを使用して、win32プラットフォーム用にコンパイルします。
クロスコンパイルの例のアプリケーションとして、fancybrowser(qt-linux / qt / examples / webkit / fancybrowser)を使用して、フォルダー「/ home / caiiiycuk / qt-cross / fancybrowser」にコピーします。 ご存知のように、他のプロジェクトを使用することができます-私の目は彼に目を向けました:)
したがって 、次のものがあります。
- Qt SDK for Linux、フォルダー「/ home / caiiiycuk / qt-cross / qt-linux」
- Qt SDK for Windows、フォルダー内の「/ home / caiiiycuk / qt-cross / qt-win」
- 「/ home / caiiiycuk / qt-cross / fancybrowser」フォルダー内のテストアプリケーション「fancybrowser」
- GCC / G ++ 4.4.3コンパイラ(Ubuntuに同梱)
- コンパイラーi586-mingw32msvc-gcc / i586-mingw32msvc-g ++(Ubuntuリポジトリーからインストール)
Linux用のコンパイル
さて、簡単なものから始めましょう-qt-linuxを使用してプロジェクトをコンパイルします(Linuxシステムの場合):
//アクションはディレクトリ/ home / caiiiycuk / qt-cross / fancybrowserから実行されますシンプルでしょ? :)出力は、fancybrowser実行可能ファイルになります。 実行すると、次のようなものが表示されます。
export QTDIR = / home / caiiiycuk / qt-cross / qt-linux / qt
export QMAKESPEC = / home / caiiiycuk / qt-cross / qt-linux / qt / mkspecs / linux-g ++-32
$ QTDIR / bin / qmake
きれいにする
作る
Windows用のコンパイル
それで、win32でコンパイルする時が来ました。 最初に、QtをWindowsでコンパイルする方法を説明する仕様ファイルを作成します。 作業を楽にするために、既存のwin32-g ++仕様ファイルをコピーします
cd qt-win / qt / mkspecs /
mkdir win32-x-g ++
cp win32-g ++ / * win32-x-g ++ /
win32-x-g ++ / qmake.confファイルに必要な修正を加えます。
QMAKE_SH = sh
...
QMAKE_CC = i586-mingw32msvc-gcc
...
QMAKE_CXX = i586-mingw32msvc-g ++
...
QMAKE_INCDIR_QT = / home / caiiiycuk / qt-cross / qt-win / qt / include
QMAKE_LIBDIR_QT = / home / caiiiycuk / qt-cross / qt-win / qt / lib
...
QMAKE_LINK = i586-mingw32msvc-g ++
QMAKE_LINK_C = i586-mingw32msvc-gcc
QMAKE_LFLAGS = -mthreads -Wl、-enable-stdcall-fixup -Wl、-enable-auto-import -Wl、-enable-runtime-pseudo-reloc -mwindows
...
QMAKE_MOC = / home / caiiiycuk / qt-cross / qt-linux / qt / bin / moc
QMAKE_UIC = / home / caiiiycuk / qt-cross / qt-linux / qt / bin / uic
QMAKE_IDC = / home / caiiiycuk / qt-cross / qt-linux / qt / bin / idc
...
QMAKE_RC = i586-mingw32msvc-windres
...
QMAKE_STRIP = i586-mingw32msvc-strip
...
これでコンパイルできます:
//アクションはディレクトリ/ home / caiiiycuk / qt-cross / fancybrowから実行されますコンパイルが成功すると、大切なfancybrowser.exeはリリースフォルダーに置かれます。 合計およびビジネス:)
エクスポートQTDIR = / home / caiiiycuk / qt-cross / qt-win / qt
export QMAKESPEC = / home / caiiiycuk / qt-cross / qt-win / qt / mkspecs / win32-x-g ++
/ホーム/ caiiiycuk / qt-cross / qt-linux / qt / bin / qmake
きれいにする
作る
実行するには、必要なdll(fancybrowser-QtCore4.dll QtGui4.dll QtNetwork4.dll QtWebKit4.dll QtXmlPatterns4.dll phonon4.dll mingwm10.dll libgcc_s_dw2-1.dll)が必要であることを忘れないでください。 これらのライブラリはqt-win / qt / binフォルダーから取得できますが、qt-win / binフォルダーからは取得できません。 結果は次のようになります。
これがqtアプリケーションのクロスコンパイルの「真の方法」であることを保証することはできません。これは私の研究です。 どんな批判にも感謝します:)このメソッドの操作性は、OpenSuseとCentOSでもテストされました。 Ubuntuは、それ以降のバージョンのmingw32がリポジトリにあったため、より優れていました。 私はそれが何に関係しているのか分かりません-些細なことですが、素晴らしいです。
これらのスクリプト(コンパイル用)は、クロスプラットフォーム製品のアセンブリを容易にするためにHudsonに簡単に統合できますが、これは別の記事のトピックです。 ありがとうございました:)