nirasan's tech blog

趣味や仕事の覚え書きです。Linux, Perl, PHP, Ruby, Javascript, Android, Cocos2d-x, Unity などに興味があります。

「cocos2d-x入門」をEclipseで試したらはまったこと

はじめに

リックテレコム出版「cocos2d-x入門」(http://www.amazon.co.jp/cocos2d-x%E5%85%A5%E9%96%80-%E6%B8%85%E6%B0%B4-%E5%8F%8B%E6%99%B6/dp/4897979226)は主に、MacでXCodeを使ったcocos2d-xの入門をまとめた本です。
自分はすぐに使える環境がLinuxEclipseだけだったので、読み替えながら試したところはまってしまったので解決策をメモします。

はまったところ

「5.2:不要なサンプルクラスを削除する」の章において、不要なクラスを削除して新規クラスを追加し実行したところ、下記のエラーが出て実効できませんでした。

~/program/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/cocos2dcpp_shared/__/__/Classes/AppDelegate.o: in function AppDelegate::applicationDidFinishLaunching():jni/../../Classes/AppDelegate.cpp:28: error: undefined reference to 'GameScene::scene()'

解決策

Eclipseでやるのを諦めて、MacでXcodeな環境を用意して進めたところ、「5.9:Android OS向けアプリとしてゲームを起動する」に解決策が書いてありました。
Androidでクラスを追加した場合は、 "proj.android/jni/Android.mk" にコンバイル対象のファイルとして追記しなければいけないそうです。

変更前
LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/HelloWorldScene.cpp
変更後
LOCAL_SRC_FILES := hellocpp/main.cpp \
                   ../../Classes/AppDelegate.cpp \
                   ../../Classes/GameScene.cpp

さいごに

EclipseよりXcodeのほうが補完とかエミュレータとかの使い心地がよかったし、iOS向けの開発も同時にできるので、環境があればMacで開発したほうがいいと思いました。
本でもそう言ってた気がするし。