Edited at

Android向けopenFrameworksをWindows+MSYS2で使おうとするとビルドが失敗する場合

More than 3 years have passed since last update.


前提

android eclipse | openFrameworksの手順(Android向けopenFrameworksの環境をEclipseで作る)に従っている場合を前提とします。

ちなみに筆者は、これ以外に「NDK_ROOT=」の指定が間違っていたために動作しなかった、というミスもやらかしています。


私が遭遇したエラーとその対応

ビルドの際に実行されたg++などのコマンドを見て、それが


  • 「android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-g++」

などではなく


  • 「android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86/bin/arm-linux-androideabi-g++」

のようになっている場合、以下が原因と見られる。

ダウンロードしたAndroid向けopenFrameworks中のファイル libs\openFrameworksCompiled\project\android\config.android.default.mk における、プラットフォームを判定する部分において、「↓ここから追加部分」と「↑ここまで追加部分」という部分を書き加える。

# libs\openFrameworksCompiled\project\android\config.android.default.mk の抜粋


ifeq ($(shell uname),Darwin)
ifneq ($(wildcard $(NDK_ROOT)/toolchains/$(TOOLCHAIN)/prebuilt/darwin-x86_64),)
HOST_PLATFORM = darwin-x86_64
else
HOST_PLATFORM = darwin-x86
endif
else ifneq (,$(findstring MINGW32_NT,$(shell uname)))
ifneq ($(wildcard $(NDK_ROOT)/toolchains/$(TOOLCHAIN)/prebuilt/windows-x86_64),)
HOST_PLATFORM = windows-x86_64
else
HOST_PLATFORM = windows
endif
PWD = $(shell pwd)
# ↓ここから追加部分
else ifneq (,$(findstring MSYS_NT,$(shell uname)))
ifneq ($(wildcard $(NDK_ROOT)/toolchains/$(TOOLCHAIN)/prebuilt/windows-x86_64),)
HOST_PLATFORM = windows-x86_64
else
HOST_PLATFORM = windows
endif
PWD = $(shell pwd)
# ↑ここまで追加部分
else
ifneq ($(wildcard $(NDK_ROOT)/toolchains/$(TOOLCHAIN)/prebuilt/linux-x86_64),)
HOST_PLATFORM = linux-x86_64
else
HOST_PLATFORM = linux-x86
endif
endif

というのも、MSYS2の場合、unameコマンドの実行結果が「MSYS_NT-10.0」という具合になり(私の環境)、上記のスクリプトではそれが検出できないためである。