QtおよびUbuntu。 win32アプリケーションをコンパイルするための環境をセットアップします

画像

このミニ記事では、win32プラットフォーム用にQtアプリケーションをクロスコンパイルする1つの方法について説明します。







友達を始めましょう



まず、ネイティブQt SDK(Linux用)をダウンロードしてインストールします。

または、コンソールで実行します:

wget get.qt.nokia.com/qtsdk/qt-sdk-linux-x86-opensource-2010.04.bin

chmod 777 qt-sdk-linux-x86-opensource-2010.04.bin

./qt-sdk-linux-x86-opensource-2010.04.bin

Qt SDK Linuxを「/ home / caiiiycuk / qt-cross / qt-linux」フォルダーに入れたので、パスに注意してください。



次の段階はおそらく最も問題の多いものです。ターゲットプラットフォーム(ウィンドウ)用にコンパイルされた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」にコピーします。 ご存知のように、他のプロジェクトを使用することができます-私の目は彼に目を向けました:)



したがって 、次のものがあります。

Linux用のコンパイル



さて、簡単なものから始めましょう-qt-linuxを使用してプロジェクトをコンパイルします(Linuxシステムの場合):

//アクションはディレクトリ/ home / caiiiycuk / qt-cross / 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

きれいにする

作る

シンプルでしょ? :)出力は、fancybrowser実行可能ファイルになります。 実行すると、次のようなものが表示されます。







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から実行されます

エクスポート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

きれいにする

作る

コンパイルが成功すると、大切なfancybrowser.exeはリリースフォルダーに置かれます。 合計およびビジネス:)

実行するには、必要な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に簡単に統合できますが、これは別の記事のトピックです。 ありがとうございました:)



All Articles