ubuntu 12.04 64bitでWin32をクロスコンパイル4 のつづき
で表題改 ubuntu 12.04 64bitでWin64をクロスコンパイル
多分最終章
Ubuntuの上でqtをwin64クロスコンパイルする環境はすべて整った。
とりあえず4でつくった64bitのQtを/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/にmvします。
つまり
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/include
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/lib
のところにそれぞれのファイルがコピーされます
そしてmkspecを64bit用に作成
cd /usr/share/qt4/mkspecs/
sudo cp -rf win32-x-g++ win64-x-g++
cd win64-x-g++
sudo vi qmake.conf
編集内容は以下の通り
#
# qmake configuration for win32-g++
#
# Written for MinGW
#
MAKEFILE_GENERATOR = MINGW
TEMPLATE = app
CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header
QT += core gui
DEFINES += UNICODE QT_LARGEFILE_SUPPORT
QMAKE_COMPILER_DEFINES += __GNUC__ WIN32
QMAKE_EXT_OBJ = .o
QMAKE_EXT_RES = _res.o
QMAKE_CC = x86_64-w64-mingw32-gcc
QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = byacc
QMAKE_YACCFLAGS = -d
QMAKE_CFLAGS =
QMAKE_CFLAGS_DEPS = -M
QMAKE_CFLAGS_WARN_ON = -Wall
QMAKE_CFLAGS_WARN_OFF = -w
QMAKE_CFLAGS_RELEASE = -O2
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CXX = x86_64-w64-mingw32-g++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
QMAKE_INCDIR = /usr/x86_64-w64-mingw32/include
QMAKE_INCDIR_QT = /home/kokawa2003/.wine/drive_c/Qt64/4.8.1/include
QMAKE_LIBDIR_QT = /home/kokawa2003/.wine/drive_c/Qt64/4.8.1/lib
QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
QMAKE_LINK = x86_64-w64-mingw32-g++
QMAKE_LINK_C = x86_64-w64-mingw32-gcc
QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE = -Wl,-s
QMAKE_LFLAGS_DEBUG =
QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL = -shared
QMAKE_LINK_OBJECT_MAX = 10
QMAKE_LINK_OBJECT_SCRIPT= object_script
QMAKE_PREFIX_STATICLIB = lib
QMAKE_EXTENSION_STATICLIB = a
QMAKE_LIBS =
QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK = -lws2_32
QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32
QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain
!isEmpty(QMAKE_SH) {
MINGW_IN_SHELL = 1
QMAKE_DIR_SEP = /
QMAKE_QMAKE ~= s,\\\\,/,
QMAKE_COPY = cp
QMAKE_STREAM_EDITOR = sed
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm
QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = test -d
} else {
QMAKE_COPY = copy /y
QMAKE_COPY_DIR = xcopy /s /q /y /i
QMAKE_MOVE = move
QMAKE_DEL_FILE = del
QMAKE_MKDIR = mkdir
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = if not exist
}
QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc
QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic
QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
QMAKE_IDL = midl
QMAKE_LIB = x86_64-w64-mingw32-ar -ru
QMAKE_RC = x86_64-w64-mingw32-windres
QMAKE_ZIP = zip -r -9
QMAKE_STRIP = x86_64-w64-mingw32-strip
QMAKE_STRIPFLAGS_LIB += --strip-unneeded
load(qt_config)
ここまででで環境構築終了
Qtのプロジェクトをtestqtとするとき
qmake -spec win64-x-g++ testqt.pro
make
で64bit のEXEができます。
file testqt.exe
で64bitを確認してください。
実行には
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin/QtCore4.dll .
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin/QtDeclarative4.dll .
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin/QtGui4.dll .
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin/QtNetwork4.dll .
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin/QtScript4.dll .
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin/QtSql4.dll .
/home/kokawa2003/.wine/drive_c/Qt64/4.8.1/bin/QtXmlPatterns4.dll .
/usr/lib/gcc/x86_64-w64-mingw32/4.6/libgcc_s_sjlj-1.dll .
/usr/lib/gcc/x86_64-w64-mingw32/4.6/libstdc++-6.dll .
が私の場合は必要でした。(すべて64bitで揃える)
上のdllをexeのローカルにコピーのあと
wine testqt.exe
で見事64bitのexeが起動します。
2012年8月14日火曜日
2012年8月13日月曜日
ubuntu 12.04 64bitでWin32をクロスコンパイル4
ubuntu 12.04 64bitでWin32をクロスコンパイル3 のつづき
そこでつぎに Qtのmingw 64bit版を用意することにした。
http://www.robwork.dk/jrobwork/index.php?option=com_content&view=article&id=71:installation-of-qt&catid=44:installation&Itemid=67&limitstart=2
基本的にはこのサイトのとおりにすればできた。
LINUXでクロスコンパイルしてみてもいいけど面倒なのでWindows7 64bit で行った。
まずmingw-w64を sourceforgeからダウンロードする。
http://sourceforge.net/projects/mingw-w64/files/
一番上のダウンロードを選ぶとソースが落ちてくるがgccのソースビルドなんてやってられないのでバイナリを直接ダウンロード
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/sezero_4.5_20111101/mingw-w64-bin_x86_64-mingw_20111101_sezero.zip/download
これを解凍して /mingw64/bin にパスを通す。
次にPerlを用意。これはAcitivePerlがいいらしいのでこれをインストール
http://www.activestate.com/activeperl/downloads/thank-you?dl=http://downloads.activestate.com/ActivePerl/releases/5.14.2.1402/ActivePerl-5.14.2.1402-MSWin32-x64-295342.msi
デフォルトでインストールするとパスが通ると思います。
で環境が整ったので次にQtのソース
まずhttp://qt.nokia.com/downloads から
http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.2.tar.gz をダウンロードして展開
でコマンドラインを起動して展開した場所に移動し
configure -opensource -no-sql-sqlite -no-qt3support -no-webkit -no-scripttools -fast -platform win32-g++
を実行。
成功すると次に
mingw32-make
をするようにいわれるのでいわれるとおりに実行
うまく行けば完了して*.dll、*.exe、*.aができます。
Qtのプロジェクトをコンパイルすればできるはずです。QtCreatorとかないのがあれですが
これをそのまま圧縮してubuntuに持ってきます。
解凍後qt-everywhere-opensource-src-4.8.1/bin で
cp /usr/lib/gcc/x86_64-w64-mingw32/4.6/libgcc_s_sjlj-1.dll .
cp /usr/lib/gcc/x86_64-w64-mingw32/4.6/libstdc++-6.dll .
で2ファイル補うと
qtdemo.exe がwine 64bit で動きます。と行ってもプロジェクトがないので起動するだけですが。
とりあえず64bitのビルドが成功したのがわかります。
これと同じ事をmkspecをいじればUbuntuでもできるとおもうが、そこまでこだわる気力がない。
そこでつぎに Qtのmingw 64bit版を用意することにした。
http://www.robwork.dk/jrobwork/index.php?option=com_content&view=article&id=71:installation-of-qt&catid=44:installation&Itemid=67&limitstart=2
基本的にはこのサイトのとおりにすればできた。
LINUXでクロスコンパイルしてみてもいいけど面倒なのでWindows7 64bit で行った。
まずmingw-w64を sourceforgeからダウンロードする。
http://sourceforge.net/projects/mingw-w64/files/
一番上のダウンロードを選ぶとソースが落ちてくるがgccのソースビルドなんてやってられないのでバイナリを直接ダウンロード
http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/sezero_4.5_20111101/mingw-w64-bin_x86_64-mingw_20111101_sezero.zip/download
これを解凍して /mingw64/bin にパスを通す。
次にPerlを用意。これはAcitivePerlがいいらしいのでこれをインストール
http://www.activestate.com/activeperl/downloads/thank-you?dl=http://downloads.activestate.com/ActivePerl/releases/5.14.2.1402/ActivePerl-5.14.2.1402-MSWin32-x64-295342.msi
デフォルトでインストールするとパスが通ると思います。
で環境が整ったので次にQtのソース
まずhttp://qt.nokia.com/downloads から
http://releases.qt-project.org/qt4/source/qt-everywhere-opensource-src-4.8.2.tar.gz をダウンロードして展開
でコマンドラインを起動して展開した場所に移動し
configure -opensource -no-sql-sqlite -no-qt3support -no-webkit -no-scripttools -fast -platform win32-g++
を実行。
成功すると次に
mingw32-make
をするようにいわれるのでいわれるとおりに実行
うまく行けば完了して*.dll、*.exe、*.aができます。
Qtのプロジェクトをコンパイルすればできるはずです。QtCreatorとかないのがあれですが
これをそのまま圧縮してubuntuに持ってきます。
解凍後qt-everywhere-opensource-src-4.8.1/bin で
cp /usr/lib/gcc/x86_64-w64-mingw32/4.6/libgcc_s_sjlj-1.dll .
cp /usr/lib/gcc/x86_64-w64-mingw32/4.6/libstdc++-6.dll .
で2ファイル補うと
qtdemo.exe がwine 64bit で動きます。と行ってもプロジェクトがないので起動するだけですが。
とりあえず64bitのビルドが成功したのがわかります。
これと同じ事をmkspecをいじればUbuntuでもできるとおもうが、そこまでこだわる気力がない。
ubuntu 12.04 64bitでWin32をクロスコンパイル3
ubuntu 12.04 64bitでWin32をクロスコンパイル2 のつづき
これでmkspecができたのでWindows用のQtコンパイルができます
たとえばtestqtでやる場合は
qmake -spec win32-x-g++ testqt.pro
make clean
make
でバッチリいけるはずです。
Qtcreatorでも ビルド設定を-spec win32-x-g++とすればビルドできると思います(これは未確認)
あと当然Debugはできません。
なお実行するときはDLLが必要です。
私のばあい
/usr/lib/gcc/i686-w64-mingw32/4.6/libgcc_s_sjlj-1.dll
/usr/lib/gcc/i686-w64-mingw32/4.6/libstdc++-6.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/libgcc_s_dw2-1.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/mingwm10.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtCore4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtDeclarative4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtGui4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtNetwork4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtScript4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtSql4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtXmlPatterns4.dll
をEXEのあるところにコピーする必要がありました。
実行はWineでもWINDOWSでもどちらもうまくいきます。
これでmkspecができたのでWindows用のQtコンパイルができます
たとえばtestqtでやる場合は
qmake -spec win32-x-g++ testqt.pro
make clean
make
でバッチリいけるはずです。
Qtcreatorでも ビルド設定を-spec win32-x-g++とすればビルドできると思います(これは未確認)
あと当然Debugはできません。
なお実行するときはDLLが必要です。
私のばあい
/usr/lib/gcc/i686-w64-mingw32/4.6/libgcc_s_sjlj-1.dll
/usr/lib/gcc/i686-w64-mingw32/4.6/libstdc++-6.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/libgcc_s_dw2-1.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/mingwm10.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtCore4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtDeclarative4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtGui4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtNetwork4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtScript4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtSql4.dll
/home/kokawa2003/.wine/drive_c/Qt/4.8.0/bin/QtXmlPatterns4.dll
をEXEのあるところにコピーする必要がありました。
実行はWineでもWINDOWSでもどちらもうまくいきます。
ubuntu 12.04 64bitでWin32をクロスコンパイル2
ubuntu 12.04 64bitでWin32をクロスコンパイル1 のつづき
次にUbuntuのQtでWin32をクロスコンパイルしてみる。
まずQtCreatorで適当なサンプルプロジェクトを作ってみる。(当然Linuxむけ)
ここではtestqt とする。実行できるのを確認。
Qtの知識がない人は諦めるか勉強してください。
次にWindows用のQtをインストールします
$ wine qt-win-opensource-4.8.0-mingw.exe
これでWindows用のQtが私の場合
/home/kokawa2003/.wine/drive_c/Qt/
にインストールされます。
なお途中で出る警告のたぐい(mingwがないとか)は全て無視で。
次にmkspecを変更します
sudo cp -Rf /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++
で環境をコピーした後
sudo vi /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf
で編集(別にviは好きなエディタに変更してください)赤字が変更部分
#
# qmake configuration for win32-g++
#
# Written for MinGW
#
MAKEFILE_GENERATOR = MINGW
TEMPLATE = app
CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header
QT += core gui
DEFINES += UNICODE QT_LARGEFILE_SUPPORT
QMAKE_COMPILER_DEFINES += __GNUC__ WIN32
QMAKE_EXT_OBJ = .o
QMAKE_EXT_RES = _res.o
QMAKE_CC = i686-w64-mingw32-gcc
QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = byacc
QMAKE_YACCFLAGS = -d
QMAKE_CFLAGS =
QMAKE_CFLAGS_DEPS = -M
QMAKE_CFLAGS_WARN_ON = -Wall
QMAKE_CFLAGS_WARN_OFF = -w
QMAKE_CFLAGS_RELEASE = -O2
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CXX = i686-w64-mingw32-g++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
QMAKE_INCDIR = /usr/i686-w64-mingw32/include
QMAKE_INCDIR_QT = /home/kokawa2003/.wine/drive_c/Qt/4.8.0/include
QMAKE_LIBDIR_QT = /home/kokawa2003/.wine/drive_c/Qt/4.8.0/lib
QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
QMAKE_LINK = i686-w64-mingw32-g++
QMAKE_LINK_C = i686-w64-mingw32-gcc
QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE = -Wl,-s
QMAKE_LFLAGS_DEBUG =
QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL = -shared
QMAKE_LINK_OBJECT_MAX = 10
QMAKE_LINK_OBJECT_SCRIPT= object_script
QMAKE_PREFIX_STATICLIB = lib
QMAKE_EXTENSION_STATICLIB = a
QMAKE_LIBS =
QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK = -lws2_32
QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32
QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain
!isEmpty(QMAKE_SH) {
MINGW_IN_SHELL = 1
QMAKE_DIR_SEP = /
QMAKE_QMAKE ~= s,\\\\,/,
QMAKE_COPY = cp
QMAKE_STREAM_EDITOR = sed
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm
QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = test -d
} else {
QMAKE_COPY = copy /y
QMAKE_COPY_DIR = xcopy /s /q /y /i
QMAKE_MOVE = move
QMAKE_DEL_FILE = del
QMAKE_MKDIR = mkdir
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = if not exist
}
QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc
QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic
QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
QMAKE_IDL = midl
QMAKE_LIB = i686-w64-mingw32-ar -ru
QMAKE_RC = i686-w64-mingw32-windres
QMAKE_ZIP = zip -r -9
QMAKE_STRIP = i686-w64-mingw32-strip
QMAKE_STRIPFLAGS_LIB += --strip-unneeded
load(qt_config)
これでビルドできるような環境ができた。
本当はQMAKE_INCDIR_QTはユーザーのホームでなく/usr/であるべきだが直さなかった。
次にUbuntuのQtでWin32をクロスコンパイルしてみる。
まずQtCreatorで適当なサンプルプロジェクトを作ってみる。(当然Linuxむけ)
ここではtestqt とする。実行できるのを確認。
Qtの知識がない人は諦めるか勉強してください。
次にWindows用のQtをインストールします
$ wine qt-win-opensource-4.8.0-mingw.exe
これでWindows用のQtが私の場合
/home/kokawa2003/.wine/drive_c/Qt/
にインストールされます。
なお途中で出る警告のたぐい(mingwがないとか)は全て無視で。
次にmkspecを変更します
sudo cp -Rf /usr/share/qt4/mkspecs/win32-g++ /usr/share/qt4/mkspecs/win32-x-g++
で環境をコピーした後
sudo vi /usr/share/qt4/mkspecs/win32-x-g++/qmake.conf
で編集(別にviは好きなエディタに変更してください)赤字が変更部分
#
# qmake configuration for win32-g++
#
# Written for MinGW
#
MAKEFILE_GENERATOR = MINGW
TEMPLATE = app
CONFIG += qt warn_on release link_prl copy_dir_files debug_and_release debug_and_release_target precompile_header
QT += core gui
DEFINES += UNICODE QT_LARGEFILE_SUPPORT
QMAKE_COMPILER_DEFINES += __GNUC__ WIN32
QMAKE_EXT_OBJ = .o
QMAKE_EXT_RES = _res.o
QMAKE_CC = i686-w64-mingw32-gcc
QMAKE_LEX = flex
QMAKE_LEXFLAGS =
QMAKE_YACC = byacc
QMAKE_YACCFLAGS = -d
QMAKE_CFLAGS =
QMAKE_CFLAGS_DEPS = -M
QMAKE_CFLAGS_WARN_ON = -Wall
QMAKE_CFLAGS_WARN_OFF = -w
QMAKE_CFLAGS_RELEASE = -O2
QMAKE_CFLAGS_DEBUG = -g
QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
QMAKE_CXX = i686-w64-mingw32-g++
QMAKE_CXXFLAGS = $$QMAKE_CFLAGS
QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS
QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON
QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE
QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG
QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC
QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD
QMAKE_CXXFLAGS_RTTI_ON = -frtti
QMAKE_CXXFLAGS_RTTI_OFF = -fno-rtti
QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads
QMAKE_CXXFLAGS_EXCEPTIONS_OFF = -fno-exceptions
QMAKE_INCDIR = /usr/i686-w64-mingw32/include
QMAKE_INCDIR_QT = /home/kokawa2003/.wine/drive_c/Qt/4.8.0/include
QMAKE_LIBDIR_QT = /home/kokawa2003/.wine/drive_c/Qt/4.8.0/lib
QMAKE_RUN_CC = $(CC) -c $(CFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CC_IMP = $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
QMAKE_RUN_CXX = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
QMAKE_RUN_CXX_IMP = $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
QMAKE_LINK = i686-w64-mingw32-g++
QMAKE_LINK_C = i686-w64-mingw32-gcc
QMAKE_LFLAGS = -mthreads -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mwindows
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads
QMAKE_LFLAGS_EXCEPTIONS_OFF =
QMAKE_LFLAGS_RELEASE = -Wl,-s
QMAKE_LFLAGS_DEBUG =
QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,console
QMAKE_LFLAGS_WINDOWS = -Wl,-subsystem,windows
QMAKE_LFLAGS_DLL = -shared
QMAKE_LINK_OBJECT_MAX = 10
QMAKE_LINK_OBJECT_SCRIPT= object_script
QMAKE_PREFIX_STATICLIB = lib
QMAKE_EXTENSION_STATICLIB = a
QMAKE_LIBS =
QMAKE_LIBS_CORE = -lole32 -luuid -lws2_32 -ladvapi32 -lshell32 -luser32 -lkernel32
QMAKE_LIBS_GUI = -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lws2_32 -lole32 -luuid -luser32 -ladvapi32
QMAKE_LIBS_NETWORK = -lws2_32
QMAKE_LIBS_OPENGL = -lglu32 -lopengl32 -lgdi32 -luser32
QMAKE_LIBS_COMPAT = -ladvapi32 -lshell32 -lcomdlg32 -luser32 -lgdi32 -lws2_32
QMAKE_LIBS_QT_ENTRY = -lmingw32 -lqtmain
!isEmpty(QMAKE_SH) {
MINGW_IN_SHELL = 1
QMAKE_DIR_SEP = /
QMAKE_QMAKE ~= s,\\\\,/,
QMAKE_COPY = cp
QMAKE_STREAM_EDITOR = sed
QMAKE_COPY_DIR = cp -r
QMAKE_MOVE = mv
QMAKE_DEL_FILE = rm
QMAKE_MKDIR = mkdir -p
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = test -d
} else {
QMAKE_COPY = copy /y
QMAKE_COPY_DIR = xcopy /s /q /y /i
QMAKE_MOVE = move
QMAKE_DEL_FILE = del
QMAKE_MKDIR = mkdir
QMAKE_DEL_DIR = rmdir
QMAKE_CHK_DIR_EXISTS = if not exist
}
QMAKE_MOC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}moc
QMAKE_UIC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}uic
QMAKE_IDC = $$[QT_INSTALL_BINS]$${DIR_SEPARATOR}idc
QMAKE_IDL = midl
QMAKE_LIB = i686-w64-mingw32-ar -ru
QMAKE_RC = i686-w64-mingw32-windres
QMAKE_ZIP = zip -r -9
QMAKE_STRIP = i686-w64-mingw32-strip
QMAKE_STRIPFLAGS_LIB += --strip-unneeded
load(qt_config)
これでビルドできるような環境ができた。
本当はQMAKE_INCDIR_QTはユーザーのホームでなく/usr/であるべきだが直さなかった。
2012年8月12日日曜日
ubuntu 12.04 64bitでWin32をクロスコンパイル1
ubuntu 12.04 64bitでWin32(win64)をクロスコンパイル
その経過をとりあえず覚書しておけと思ったので書いておく
まず test.cppとして以下のソースを書いた。
#include <windows.h >
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL,
"大川浩司",
"Hello World", MB_OK);
return 0;
}
でこのソースをS-JISで保存する。(UTF8だと文字化け)
でコンパイルするにはmingwかmingw-w64パッケージの
i586-mingw32msvc-g++ (mingw)
i686-w64-mingw32-g++ (mingw-w64)
x86_64-w64-mingw32-g++(mingw-w64)
のどれかを使う。
私の場合mingw-w64を入れたのでi686-w64-mingw32-g++,x86_64-w64-mingw32-g++
をつかった。
$ i686-w64-mingw32-g++ test.cpp -o test.exe
$ x86_64-w64-mingw32-g++ test.cpp -o test.exe
で、それぞれWin32,Win64の実行ファイルができる。
確認は
$file test.exe
で32,64bitをチェックできる。
実行は
$wine test.exe
とするかもしくはWindowsで実行すればいい。
その経過をとりあえず覚書しておけと思ったので書いておく
まず test.cppとして以下のソースを書いた。
#include <
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
MessageBox(NULL,
"大川浩司",
"Hello World", MB_OK);
return 0;
}
でこのソースをS-JISで保存する。(UTF8だと文字化け)
でコンパイルするにはmingwかmingw-w64パッケージの
i586-mingw32msvc-g++ (mingw)
i686-w64-mingw32-g++ (mingw-w64)
x86_64-w64-mingw32-g++(mingw-w64)
のどれかを使う。
私の場合mingw-w64を入れたのでi686-w64-mingw32-g++,x86_64-w64-mingw32-g++
をつかった。
$ i686-w64-mingw32-g++ test.cpp -o test.exe
$ x86_64-w64-mingw32-g++ test.cpp -o test.exe
で、それぞれWin32,Win64の実行ファイルができる。
確認は
$file test.exe
で32,64bitをチェックできる。
実行は
$wine test.exe
とするかもしくはWindowsで実行すればいい。
登録:
投稿 (Atom)