ターゲットシステムに事前にQtをインストールする必要はありません。Windows用にプリコンパイルされたライブラリをプルする必要もありません。
このトリックは、KDE 4.8シェルおよび対応するQtライブラリを備えたVitualBoxにインストールされたGentoo x86_64、およびグラフィックシェルなしのGentoo x86_64ホームサーバー(Intel®Core(TM)i5 CPU 760 @ 2.80GHz)の2つのプラットフォームで行いましたプリインストールされたQtライブラリ。
クロスコンパイラのセットアップ
原則として、クロスコンパイルには次のユーティリティが必要です。
- mingw32-g ++
- mingw32-gcc
- mingw32-ar
- mingw32-ld
- mingw32-strip
- mingw32-windres
そしてパッケージ:
- binutils
- gcc
- w32api
- mingw-runtime
Gentooの例を挙げますが、他のディストリビューションでも、ming32(x86)のインストールと設定に関する同様の指示があると思います。
Gentooディストリビューションの場合、クロスコンパイラのインストールは簡単です:
app-portage / laymanパッケージがインストールされていない場合、次の操作を実行する必要があります。
# emerge layman
# mkdir /usr/local/portage
# echo 'PORTDIR_OVERLAY=”/usr/local/portage/”' >> /etc/make.conf
# echo 'source /var/lib/layman/make.conf' >> /etc/make.conf
# env-update
mingw32クロスツールチェーンをインストールするには:
# emerge crossdev portage-utils
# crossdev -t i686-pc-mingw32
4.8.0のコンパイルには、少なくとも3つのことが関連しています。
- zlibがなければ、プロジェクトをビルドできません
- libiconvがなければ、プロジェクトはビルドされません
- タブレットのサポートに関連するバグがあります
必要なライブラリのアセンブリとインストール
次の3つの理由で、i686-pc-mingw32-emergeユーティリティを使用しませんでした。
- libiconvは私のためにコンパイルされましたが、インストールを拒否し、qt-core用にebuildを書き直そうとして長い間失敗した操作の後、libiconv用にebuildで踊りたいという欲求を失いました。
- 必要なライブラリをインストールするための少なくとも2つの普遍的な方法をマニュアルに含めてください。
- 記事なしでたくさんのパッチを共有する必要があります。
! 注意! PREFIX = i686-pc-mingw32-のこのアセンブリは、別のシステムのコンパイラとユーティリティの名前が異なる場合があります。 したがって、このアセンブリのルートディレクトリは/ usr / i686-pc-mingw32であるため、すべてのインクルードファイルとlibファイルは/ usr / i686-pc-mingw32 / usr / include、/ usr / i686-pc-mingw32 / libにインストールされます。
ホームフォルダに集めました。ライブラリをインストールするためだけにルート権限が必要です。
zlibをインストールします。
$ cd
$ wget www.zlib.net/zlib-1.2.6.tar.gz
$ tar -zxf zlib-1.2.6.tar.gz
$ cd zlib-1.2.6
$ CC=i686-pc-mingw32-gcc LDSHARED=i686-pc-mingw32-gcc CPP="i686-pc-mingw32-gcc -E" AR=i686-pc-mingw32-ar RANLIB=i686-pc-mingw32-ranlib ./configure --prefix=/usr/i686-pc-mingw32/
# make && make install
iconvをインストールします。
$ cd
$ wget ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
$ tar -zxf libiconv-1.14.tar.gz
$ cd libiconv-1.14
$ ./configure --enable-static --disable-shared --build=x86_64-pc-linux-gnu --host=i686-pc-mingw32 --prefix=/usr/i686-pc-mingw32/ LDFLAGS="-Wl,-elf2flt" CC="i686-pc-mingw32-gcc"
# make && make install
ビルドQt-4.8.0
次に、Qtビルドに進みます。
$ cd
$ wget download.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.8.0.tar.gz
$ tar -zxf qt-everywhere-opensource-src-4.8.0.tar.gz
$ cd qt-everywhere-opensource-src-4.8.0
$ wget pastebin.com/download.php?i=CAjgyASQ -O qapplication_win.cpp.patch
$ patch -p0 -i qapplication_win.cpp.patch
このパッチの意味は、QT_NO_TABLET、QT_NO_TABLETEVENTのバグを修正することです。 ここでのポイントは、QT_NO_TABLETフラグがqapplication_p.hヘッダーファイルからQTabletDeviceData定義を削除することです。
#ifndef QT_NO_TABLET
struct QTabletDeviceData
{
それでも、QTabletDeviceDataを使用するqapplication_win.cppファイルには4行あるため、コード内の対応する場所は#ifndef QT_NO_TABLETでラップされました。このようなラッパーの「正確さ」を保証しませんが、Qtを正常にコンパイルする必要がありました。
最後に、mingw32のmkspecファイル:
$ wget pastebin.com/raw.php?i=uPMXC6cD -O qmake.conf
クロスツールのプレフィックスが異なる場合は、ファイルを修正する必要があります。
その後、ファイルをコピーします。
$ cp qmake.conf mkspecs/win32-g++/qmake.conf
カスタマイズ:
$ ./configure -prefix /usr/i686-pc-mingw32/usr -bindir /usr/i686-pc-mingw32/usr/bin -libdir /usr/i686-pc-mingw32/usr/lib/qt4 -docdir /usr/i686-pc-mingw32/usr/share/doc/qt-4.8.0 -headerdir /usr/i686-pc-mingw32/usr/include/qt4 -plugindir /usr/i686-pc-mingw32/usr/lib/qt4/plugins -importdir /usr/i686-pc-mingw32/usr/lib/qt4/imports -datadir /usr/share/qt4 -translationdir /usr/share/qt4/translations -sysconfdir /etc/qt4 -examplesdir /usr/share/qt4/examples -demosdir /usr/share/qt4/demos -opensource -confirm-license -shared -fast -largefile -stl -verbose -xplatform win32-g++ -nomake examples -nomake demos -release -no-separate-debug-info -exceptions -no-rpath -no-pch -reduce-relocations -arch windows -no-accessibility -no-xmlpatterns -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-svg -no-webkit -no-script -no-scripttools -no-declarative -system-zlib -no-gif -no-libtiff -no-libpng -no-libmng -no-libjpeg -no-cups -no-dbus -no-gtkstyle -no-nas-sound -no-opengl -no-sm -no-xshape -no-xvideo -no-xsync -no-xinerama -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-mitshm -no-fontconfig -no-freetype -no-xinput -no-xkb -no-glib -iconv -no-optimized-qmake -no-openssl -no-qt3support
コンパイルします:
$ make -j$((`cat /proc/cpuinfo | grep processor | wc -l`+1))
Intel®Core(TM)プロセッサを搭載したホームサーバーでは、i5 CPU 760 @ 2.80GHzが十分に速く組み立てられました。
ライブラリとツールをインストールします。
# make install
何らかの理由で、qmakeが適切なディレクトリにインストールされていなかったため、コピーする必要がありました
# cp bin/qmake /usr/i686-pc-mingw32/usr/bin/qmake
テスト中
$ cd
$ cp -r qt-everywhere-opensource-src-4.8.0/examples/tutorials/addressbook addressbook
$ cd addressbook
$ /usr/i686-pc-mingw32/usr/bin/qmake -spec win32-g++
$ make
$ ls part7/release/part7.exe
part7/release/part7.exe
実行可能ファイルが現れました。
その後、ワインでテストできますが、よりクリーンな実験のために、実行可能ファイルをライブラリとともにWindowsコンピューターにコピーすることをお勧めします。 Windows 7(x64)でテストしました。 sambaが構成されている場合は、必要なものをすべてフォルダーにコピーして実行できます。
$ cp part7/release/part7.exe /var/samba/files/build/
$ cp `find / -name libstdc++-6.dll 2> /dev/null` /var/samba/files/build/libstc++-6.dll
$ cp `find / -name libgcc_s_sjlj-1.dll 2> /dev/null` /var/samba/files/build/libgcc_s_sjlj-1.dll
$ cp /usr/i686-pc-mingw32/usr/bin/*.dll /var/samba/files/build/
以下を開始します。
私はあなたが同じことを見て、この記事があなたにとって興味深いものになることを心から願っています。
Libmysqlのサポート
残念ながら、mysql-connector-cをクロスコンパイルすると、別の記事になります。 事前にコンパイルされたライブラリを使用して、次のガイドを使用できます
-www.qtcentre.org/wiki/index.php?title=Building_the_QMYSQL_plugin_on_Windows_using_MinGWGentooを使用するGentooユーザー
近い将来、qt-coreのebuildを使用する可能性が高いですが、これまでのところ十分な時間とエネルギーがありません。