Mac OSX El CapitanにwxWidgetsのwin32クロスコンパイル開発環境構築しました。

2016年3月29日

Windowsのアプリケーション開発の度に仮想環境を起動するのを煩わしく感じていたので、MacOSXでのwin32クロスコンパイル開発環境を構築すべく、ここのところC++フレームワークwxWidgetsに取り組んでいました。

最近、ようやく何とかWindowsのwin32クロスコンパイル開発環境を構築しましたのでご紹介します。

後、最新のXcodeがYosemiteにインストールできなくなったので、El Capitanへアップデートもしました。案の定、移行したEl Capitanでの問題がありました。(ー ー;)ちなみに2018年1月17日時点では、macOS Sierra 10.12へアップデートしています。

まずはクロスコンパイラの入手先です。

GCC on Mac OSXがi586のmacosxクロスコンパイラです。

Mingw-w64プロジェクトがi686のmacosxクロスコンパイラです。

MacPortsをインストールして、ターミナルコマンドportで、クロスコンパイラmingw-w64をダウンロードして最新版をインストールする事もできます。( 2017年12月13日追記 )

ターミナル操作

$ sudo port install mingw-w64

インストール後の実行画面

 

解凍したフォルダ構成(mingw-w64の32bit i686)GCC Version 4.9.0

スクリーンショット 2016-04-04 9.29.54

解凍したフォルダ構成(GCC on MacOSXの32bit i586)GCC Version 4.8.0

スクリーンショット 2016-03-29 11.51.02

解凍したフォルダmingw-w32下binフォルダへのパスを.bash_profileに追加します。

i686例:export PATH=/Users/masaru/work/GCC/mingw-w32/bin:$PATH

i586例:expert PATH=/usr/local/gcc-4.8.0-qt-4.8.4-for-mingw32/win32-gcc/bin:$PATH

今回、構築するC++フレームワークwxWidgetsは、安定版3.0.3です。開発版3.1.1では、mingw32のconfigure設定でエラーが出てMakefileが作成されない為です。

まあ、将来の安定版3.2に期待しましょう。(^ ^;)

この為、最新のXcodeでMacOSXの静的ライブラリを安定版3.0.3で構築しました。

wxWidgets安定版3.0.3のフォルダ構成

wxWidgets-3.0.3フォルダ下にbuild_win32フォルダとbuild_releaseフォルダを作成したらターミナルモードで、build_win32へ移動して、ターミナルでconfigure設定の以下を入力してリターンします。

英文解説箇所

(i686)

../configure --prefix=/Users/masaru/work/GCC/mingw-w32 --host=i686-w64-mingw32 --disable-shared --enable-unicode

–prefix=の部分は、インストールしたmingw-w64のフォルダ名になります。

–host=の部分は、mingw-w64の-gccの前部分のコンパイラのファイル名です。

–disable-sharedは、共有ライブラリを使用しない(静的ライブラリを使用する)指定です。

–enable-unicodeは、Unicode(UTF-8)を使用する指定です。

(i586)
dmgファイルのインストーラーで/usr/localフォルダ下にインストールされます。

../configure --prefix=/usr/local/gcc-4.8.0-qt-4.8.4-for-mingw32/win32-gcc --host=i586-mingw32 --disable-shared --enable-unicode

しばーらくすると、build_win32フォルダ下に各ファイルがコピーされて、Makefileが作成されて以下のような画面が出たら、makeリターンで、コンパイルが実行されて、最後にerrorなどの表示が出なければ、ライブラリの完成です。
configure成功画面

スクリーンショット 2016-03-28 17.58.57

コンパイルが完了したら、今度は、サンプルのコンパイルです。

cd samplesリターン

makeリターン

でサンプルのコンパイルが実行され、最後にerrorなどの表示が出なければ、問題なくサンプルの拡張子exe実行ファイルが各フォルダ下に作成されているはずです。

実行ファイルですが、残念ながらi686でコンパイルした場合、標準設定のWineなどでは実行エラーとなり実行できません。

Wineのホームページに対応するconfigureパラメータ–enable-win64でコンパイルもして試しましたが、上手くいきませんでした。

今の時点では、Wineで実行したい場合は、i586でコンパイルしています。

MacOSX El CapitanへインストールしたWineでのexe実行画面

スクリーンショット 2016-04-04 9.18.55          スクリーンショット 2016-03-29 0.50.30

スクリーンショット 2016-03-29 11.46.21

i686でコンパイルしたexe実行ファイルは、WindowsOSでの動作確認が必要となります。まあ最終的な確認では、どちらでコンパイルしたものもWindowsでの動作確認が必要なんですけどね。(^ ^;)

次は、MacOSXの静的ライブラリ作成になります。

macOS Sierraで最新のXcode 10.73で、wxWidgetsの安定版3.0.3ではエラーも出ないでMakeができます。

MacOSX10.7もサポートするには、Xcode 5.0.2を追加インストールしてターミナルで、xcode-select –switch <path>でXcode5.0.2にスイッチするか、Xcode5.0.2に含まれているMacOSXのMacOSX10.7.sdkを最新Xcodeの

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

フォルダへコピーする必要があります。

要するにMacOSX 10.7のSDKが必要なんですね。(^ ^)

ターミナルでwxWidgets-3.0.3下に作成したフォルダbuild_releaseへ移動してから以下を入力してリターンします。

英文解説箇所

../configure --with-osx_cocoa --with-macosx-version-min=10.7 --with-macosx-sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.7.sdk --prefix="$(pwd)" --disable-shared --enable-unicode

MacOSX10.9以上のサポートとする場合は、MacOSX10.7のSDKのコピーは不要です。

../configure --with-osx_cocoa --with-macosx-version-min=10.9 --with-macosx-sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk --prefix="$(pwd)" --disable-shared --enable-unicode

–with-osx_cocoa –with-macosx-version-min=10.xは、MacOSXの最小バージョン指定です。

–with-macosx-sdk=でSDKファイルをフォルダ位置を含めて直接指定します。

しば〜らくすると、build_releaseフォルダ下に各ファイルがコピーされて、Makefileが作成されてconfigure成功画面が出たら、makeリターンで、コンパイルが実行されて、最後にerrorなどの表示が出なければ、ライブラリの完成です。

その後、ターミナルで

cd samplesリターン

makeリターン

でサンプルのコンパイルが実行されて、最後にerrorなどの表示が出なければ、問題なくサンプルのアイコン表示の実行ファイルが各フォルダ下に作成されているはずです。

スクリーンショット 2016-03-29 12.59.53

そうそう、El Capitanでの問題ですが、Finderの操作中にフォルダのファイル数が多く、頻繁に移動しているとFinderが異常終了する事があります。

⤵︎(T T) コンパイル構築は問題ないんですけどね〜。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です