EasyRPG / Player

RPG Maker 2000/2003 and EasyRPG games interpreter
https://easyrpg.org/player/
GNU General Public License v3.0
983 stars 186 forks source link

[Documentation] Working on the android port #411

Closed BlisterB closed 8 years ago

BlisterB commented 9 years ago

Hello guy :). Excuse me I open a thread similar to the other but not related with Mac OS. I've installed Ubuntu and I'm again facing problem to work on the android port :/. The lack of documentation on the subject is very problematic and I will write it if I success (an other developper friend will work with me, I hope this will be quicker for him lol).

Can you please describe me witch OS you use, witch IDE (Eclipse or the new Android Studio) and how you make it work (importing the player, witch command you use etc.). Any information will help me to understand the solution and write a clear documentation for futur developper :).

Ghabry commented 9 years ago

For getting the required libs see your previous issue.

I still use Eclipse because I had no motivation to update to Android Studio, yet.

I basicly imported "existing android code" and choose builds\android as Android directory. Then it just works (except native code). When I alter native code I just run ndk-build from the console again. This way you can't debug native code for Android but 99% of the code is shared so you can just debug the linux/windows or whatever version.

BlisterB commented 9 years ago

Thank you for your answer.

1) To build android-toolchain, do you use the Jenkin's script or just the instruction of your github repo ? 2) `android-toolchain is in the same directory that your player ?

Ghabry commented 9 years ago

The Android toolchain (SDK and NDK) is obtained from the Google page. The needed API is API12 (install via SDK manager).

The Jenkin's script does the same as the instruction in the github repo. Except ICU, forgot mentioning this in the README. Just use the script from Jenkins.

No easyrpg-android-toolchain is independend from Player repo. You set EASYDEV_ANDROID to the directory of easyrpg-android-toolchain (where the README is).

BlisterB commented 9 years ago

Haaaa I succeed in building the project and importing it on Eclipse. I can launch it the Virtual Machine, but when I select a game, the app crash. Do you ever had this problem ?

Here is the logcat :

02-02 18:58:12.972: W/dalvikvm(422): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/libsdl/app/SDLActivity;
02-02 18:58:12.972: W/dalvikvm(422): Class init failed in newInstance call (Lorg/easyrpg/player/EasyRpgPlayerActivity;)
02-02 18:58:13.002: D/dalvikvm(422): GC_CONCURRENT freed 295K, 6% free 7060K/7495K, paused 3ms+4ms
02-02 18:58:13.012: D/AndroidRuntime(422): Shutting down VM
02-02 18:58:13.012: W/dalvikvm(422): threadid=1: thread exiting with uncaught exception (group=0x40014760)
02-02 18:58:13.022: E/AndroidRuntime(422): FATAL EXCEPTION: main
02-02 18:58:13.022: E/AndroidRuntime(422): java.lang.ExceptionInInitializerError
02-02 18:58:13.022: E/AndroidRuntime(422):  at java.lang.Class.newInstanceImpl(Native Method)
02-02 18:58:13.022: E/AndroidRuntime(422):  at java.lang.Class.newInstance(Class.java:1301)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1663)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1764)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.app.ActivityThread.access$1500(ActivityThread.java:122)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1002)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.os.Handler.dispatchMessage(Handler.java:99)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.os.Looper.loop(Looper.java:132)
02-02 18:58:13.022: E/AndroidRuntime(422):  at android.app.ActivityThread.main(ActivityThread.java:4025)
02-02 18:58:13.022: E/AndroidRuntime(422):  at java.lang.reflect.Method.invokeNative(Native Method)
02-02 18:58:13.022: E/AndroidRuntime(422):  at java.lang.reflect.Method.invoke(Method.java:491)
02-02 18:58:13.022: E/AndroidRuntime(422):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-02 18:58:13.022: E/AndroidRuntime(422):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-02 18:58:13.022: E/AndroidRuntime(422):  at dalvik.system.NativeStart.main(Native Method)
02-02 18:58:13.022: E/AndroidRuntime(422): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load SDL2: findLibrary returned null
02-02 18:58:13.022: E/AndroidRuntime(422):  at java.lang.Runtime.loadLibrary(Runtime.java:425)
02-02 18:58:13.022: E/AndroidRuntime(422):  at java.lang.System.loadLibrary(System.java:554)
02-02 18:58:13.022: E/AndroidRuntime(422):  at org.libsdl.app.SDLActivity.<clinit>(SDLActivity.java:52)
02-02 18:58:13.022: E/AndroidRuntime(422):  ... 15 more
02-02 18:58:33.301: I/Process(422): Sending signal. PID: 422 SIG: 9
BlisterB commented 9 years ago

I created a sdcard on and put my game in it : http://img11.hostingpics.net/pics/522738Capturedcran20150202190914.png

That's when I select the game that the app crash :/.

Ghabry commented 9 years ago

Maybe you should read a tutorial about programming for Android (Java and Native).

As you can clearly see in the error message you lack "SDL2" which is one of the native libraries. These libs are missing in "builds/android/libs/armeabi-v7a".

Set EASYDEV_ANDROID correctly and run ndk-build in "builds/android" again. The Makefile handles the copying of the libs.

BlisterB commented 9 years ago

I did this before posting this message, 5 times :p. I will watch all this stuff deeply. I think I'm not far away the solution haha. For the moment I can translate the app haha.

Ghabry commented 9 years ago

Please provide output of "echo $EASYDEV_ANDROID", "ls $EASYDEV_ANDROID"

And in the player directory: "ls builds/android/libs/armeabi-v7a"

BlisterB commented 9 years ago

Here are my result : echo $EASYDEV_ANDROID :

/Users/mehdi/easyRPG/android-toolchain

ls $EASYDEV_ANDROID :

README
boost_1_55_0
boost_1_55_0.tar.gz
include
jni
libs
obj
project.properties
script.sh

ls builds/android/libs/armeabi-v7a

libSDL2.so
libSDL2_mixer.so
libiconv.so
libmain.so
Ghabry commented 9 years ago

Wired. Should work then. I hate Android.

Look into the .apk file (is a zip archive) and check that it contains the libs/armeabi-v7a directory.

Could you provide the full model name of your Android device?

BlisterB commented 9 years ago

Haha I'm sure that Android loves you, as we say in french "Qui aime bien chatie bien"

I uncompressed GameBrowserActivity.apk, this is the result of ls -R in this :

AndroidManifest.xml META-INF            classes.dex         lib                 res                 resources.arsc

./META-INF:
CERT.RSA    CERT.SF     MANIFEST.MF

./lib:
armeabi-v7a

./lib/armeabi-v7a:
libSDL2.so       libSDL2_mixer.so libiconv.so      libmain.so

./res:
drawable-hdpi-v4    drawable-mdpi-v4    drawable-xhdpi-v4   drawable-xxhdpi-v4  drawable-xxxhdpi-v4 layout              menu

./res/drawable-hdpi-v4:
ic_launcher.png

./res/drawable-mdpi-v4:
ic_launcher.png

./res/drawable-xhdpi-v4:
ic_launcher.png

./res/drawable-xxhdpi-v4:
ic_launcher.png

./res/drawable-xxxhdpi-v4:
ic_launcher.png

./res/layout:
game_browser.xml main.xml         region_menu.xml

./res/menu:
player_menu.xml

armeabit-v7a directory is present, but in a lib directory, not libs(not sure if it was a mispelling)

Ghabry commented 9 years ago

Are you running it on an emulator? Make sure to use the ARM emulator, not the x86 one. You have the ARM when everything runs in slow motion ;)

Patches for x86 Android support are welcome but we don't provide any support.

BlisterB commented 9 years ago

Yep, here it my configuration : http://img11.hostingpics.net/pics/139926Capturedcran20150202234441.png

Ghabry commented 9 years ago

Is it possible to set the ABI to armeabi-v7a ? (If not maybe there is an image for this in the SDK manager)

BlisterB commented 9 years ago

I'm downloading that :). Comparing the official release on easyrpg.org and my apk I noticed the absence of the timidity directory in asset, don't know if it's related but I find that akward.

Ghabry commented 9 years ago

Right. That is another build step in the git plugin git clone https://github.com/Ghabry/timidity_gus.git into builds/android/assets/timidity

Not critical but you will need it for MIDI support

armeabi and armeabi-v7a are different. The 2nd one has hardware floating point support and usually NEON SIMD. The market share for the first one should be very low.

BlisterB commented 9 years ago

IT WORKED OMG IT WORKED :D !! :dancer: :dancer: :dancer: :dancer: :dancer: :dancer: :dancer: :dancer:

THANKS A LOT http://img11.hostingpics.net/pics/521187Capturedcran20150203003728.png Now I'm good to do this documentation, learn android programation and improving this app ^^. Thank you for your patience !!

(NB : Do not forget to use host GPU haha)

Ghabry commented 9 years ago

Good. That's all we can do from our part. If you should have further Android problems we probably won't be able to help you 😉

fdelapena commented 9 years ago

Congrats, now you have the dev platform ready. If you need some ideas to improve the android port, here are a few:

https://github.com/EasyRPG/Player/labels/Android

Issue #288 is currently the most awaited feature by Google Play user comments.

BlisterB commented 9 years ago

I will eat some android doc with a friend and we will work on that ;). I will also do the documentation for building android port the week :).

BlisterB commented 9 years ago

Hi guys :)

I worked on the documentation and I wrote a page to help new Android Developpers :). I tried to be the clearest as possible, this was a bit complicated though ! https://wiki.easyrpg.org/development/compiling/player/android

fdelapena commented 9 years ago

Thanks @BlisterBoy! looks like the git describe is not needed for general use, it just updates the git revision number. It could be explained there or just removed. The jarsigner would need an explanation about the java keystore and about apk signing, as these environment variables does not exist by default (they are set on our jenkins job), also the signature.

BlisterB commented 9 years ago

Okay @fdelapena , so I delete those lines :

#Configuration
GIT_DESCRIBE_VERSION=`git describe | cut -d - -f -2 | sed s/-/./g`
GIT_COMMIT_COUNT=`git rev-list HEAD --count`
mv AndroidManifest.xml AndroidManifest.orig.xml
cat AndroidManifest.orig.xml | sed -e 's/android:versionCode=".*"/android:versionCode="'$GIT_COMMIT_COUNT'"/' | sed -e 's/android:versionName=".*"/android:versionName="'$GIT_DESCRIBE_VERSION'"/' > AndroidManifest.xml

And add an explanation for the apk signing part and this doc will be fine, exact ?

fdelapena commented 9 years ago

Yeah, it should be enough with that ^^

BlisterB commented 8 years ago

Hey @Ghabry , did the documentation about compiling the android port has to be redone ? I noticed I couldn't launch a game anymore and I found this on your repo : https://github.com/Ghabry/easyrpg-android-libs

Ghabry commented 8 years ago

The script doesn't work for Windows. Maybe you have some luck with cygwin. But for Linux and Mac the build_android.sh script should work (I use it to bootstrap the toolchain on our server)

BlisterB commented 8 years ago

Okay so the procedure has changed I'll study that and update the documentation

Ghabry commented 8 years ago

Yeah, completely different, but much easier :D

BlisterB commented 8 years ago

Okay nice ^^, I'll study that after my job interview monday !

Ghabry commented 8 years ago

Good luck. Did you apply as an Android software engineer? :P

BlisterB commented 8 years ago

Yeah :p, for an internship in a firm managing open source projects, sounds great ^^.

BlisterB commented 8 years ago

Hmmm it seems you make a reference to a folder "x86-toolchain" which doesn't exist (line 32, file build_android.sh)

export PLATFORM_PREFIX=$WORKSPACE/x86-toolchain

Where does it come from ?

Ghabry commented 8 years ago

It is created on line 33

BlisterB commented 8 years ago

Hi @Ghabry I'm trying to build the android toolchain on Linux but I'm facing problems

On those lines from the script :

cd libpng-1.6.20
./configure --host=$TARGET_HOST --prefix=$PLATFORM_PREFIX --disable-shared --enable-static
make -j2

./configure obtain this :

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for i686-linux-android-strip... i686-linux-android-strip
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking for i686-linux-android-gcc... i686-linux-android-gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... yes
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether i686-linux-android-gcc accepts -g... yes
checking for i686-linux-android-gcc option to accept ISO C89... none needed
checking whether i686-linux-android-gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of i686-linux-android-gcc... gcc3
checking dependency style of i686-linux-android-gcc... gcc3
checking build system type... x86_64-unknown-linux-gnu
checking host system type... i686-pc-linux-android
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking how to print strings... printf
checking for ld used by i686-linux-android-gcc... /home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/i686-linux-android/bin/ld
checking if the linker (/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/i686-linux-android/bin/ld) is GNU ld... yes
checking how to run the C preprocessor... i686-linux-android-gcc -E
checking for gawk... (cached) gawk
checking whether ln -s works... yes
checking whether make sets $(MAKE)... (cached) yes
checking for BSD- or MS-compatible name lister (nm)... /home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/bin/i686-linux-android-nm -B
checking the name lister (/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/bin/i686-linux-android-nm -B) interface... BSD nm
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-unknown-linux-gnu file names to i686-pc-linux-android format... func_convert_file_noop
checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/i686-linux-android/bin/ld option to reload object files... -r
checking for i686-linux-android-objdump... i686-linux-android-objdump
checking how to recognize dependent libraries... pass_all
checking for i686-linux-android-dlltool... no
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for i686-linux-android-ar... i686-linux-android-ar
checking for archiver @FILE support... @
checking for i686-linux-android-strip... (cached) i686-linux-android-strip
checking for i686-linux-android-ranlib... i686-linux-android-ranlib
checking command to parse /home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/bin/i686-linux-android-nm -B output from i686-linux-android-gcc object... ok
checking for sysroot... no
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for i686-linux-android-mt... no
checking for mt... mt
configure: WARNING: using cross tools not prefixed with host triplet
checking if mt is a manifest tool... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if i686-linux-android-gcc supports -fno-rtti -fno-exceptions... no
checking for i686-linux-android-gcc option to produce PIC... -fPIC -DPIC
checking if i686-linux-android-gcc PIC flag -fPIC -DPIC works... yes
checking if i686-linux-android-gcc static flag -static works... yes
checking if i686-linux-android-gcc supports -c -o file.o... yes
checking if i686-linux-android-gcc supports -c -o file.o... (cached) yes
checking whether the i686-linux-android-gcc linker (/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/i686-linux-android/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... Android linker
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking that AWK works... ok
checking for ANSI C header files... (cached) yes
checking for an ANSI C-conforming const... yes
checking for size_t... yes
checking whether struct tm is in sys/time.h or time.h... time.h
checking for C/C++ restrict keyword... __restrict
checking for working strtod... no
checking for pow... no
checking for pow in -lm... yes
checking for memset... yes
checking for pow... (cached) no
checking for pow in -lm... (cached) yes
checking for zlibVersion in -lz... yes
checking for feenableexcept in -lm... yes
checking for feenableexcept... yes
checking if using Solaris linker... no
checking if libraries can be versioned... yes
checking for symbol prefix... 
configure: pkgconfig directory is ${libdir}/pkgconfig
configure: Extra options for compiler: 
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating libpng.pc
config.status: creating libpng-config
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands

The command make said :

make  all-am
make[1]: Entering directory `/home/seira/easyrpg/easyrpg-android-libs/libpng-1.6.20'
/bin/bash ./libtool  --tag=CC   --mode=link i686-linux-android-gcc  -g -O2  -L/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/lib -o pngtest pngtest.o libpng16.la -lm -lz -lm 
/bin/bash ./libtool  --tag=CC   --mode=link i686-linux-android-gcc  -g -O2  -L/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/lib -o pngfix contrib/tools/pngfix.o libpng16.la -lm -lz -lm 
libtool: link: i686-linux-android-gcc -g -O2 -o pngfix contrib/tools/pngfix.o  -L/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/lib ./.libs/libpng16.a -lz -lm
libtool: link: i686-linux-android-gcc -g -O2 -o pngtest pngtest.o  -L/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/lib ./.libs/libpng16.a -lz -lm
/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/bin/../lib/gcc/i686-linux-android/4.9/../../../../i686-linux-android/bin/ld: error: contrib/tools/pngfix.o: incompatible target
/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/bin/../sysroot/usr/lib/crtbegin_dynamic.o:crtbrand.c:function _start: error: undefined reference to 'main'
/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/bin/../lib/gcc/i686-linux-android/4.9/../../../../i686-linux-android/bin/ld: error: pngtest.o: incompatible target
/home/seira/easyrpg/easyrpg-android-libs/x86-toolchain/bin/../sysroot/usr/lib/crtbegin_dynamic.o:crtbrand.c:function _start: error: undefined reference to 'main'
collect2: error: ld returned 1 exit status
collect2: error: ld returned 1 exit status
make[1]: *** [pngtest] Error 1
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [pngfix] Error 1
make[1]: Leaving directory `/home/seira/easyrpg/easyrpg-android-libs/libpng-1.6.20'
make: *** [all] Error 2

Do you have an idea of where does the problem come from ?

Ghabry commented 8 years ago

Delete everything and run the compile script again. Did the script already ran once? Then it probably found object files for ARM or MIPS and fails.

BlisterB commented 8 years ago

Yep that's was it ! But I'm now facing a problem installing pixman, with an error during make

sed -i.bak 's/SUBDIRS = pixman demos test/SUBDIRS = pixman/' Makefile.am
autoreconf -fi

Result :

glibtoolize: putting auxiliary files in '.'.
glibtoolize: copying file './ltmain.sh'
glibtoolize: Consider adding 'AC_CONFIG_MACRO_DIRS([m4])' to configure.ac,
glibtoolize: and rerunning glibtoolize and aclocal.
glibtoolize: Consider adding '-I m4' to ACLOCAL_AMFLAGS in Makefile.am.
configure.ac:73: installing './compile'
configure.ac:62: installing './missing'
demos/Makefile.am:11: warning: source file '../test/utils.c' is in a subdirectory,
demos/Makefile.am:11: but option 'subdir-objects' is disabled
automake: warning: possible forward-incompatibility.
automake: At least a source file is in a subdirectory, but the 'subdir-objects'
automake: automake option hasn't been enabled.  For now, the corresponding output
automake: object file(s) will be placed in the top-level directory.  However,
automake: this behaviour will change in future Automake versions: they will
automake: unconditionally cause object files to be placed in the same subdirectory
automake: of the corresponding sources.
automake: You are advised to start using 'subdir-objects' option throughout your
automake: project, to avoid future incompatibilities.
demos/Makefile.am:11: warning: source file '../test/utils-prng.c' is in a subdirectory,
demos/Makefile.am:11: but option 'subdir-objects' is disabled
demos/Makefile.am: installing './depcomp'
./configure --host=$TARGET_HOST --prefix=$PLATFORM_PREFIX --disable-shared --enable-static

Result :

checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether make supports nested variables... (cached) yes
checking build system type... x86_64-apple-darwin15.2.0
checking host system type... x86_64-apple-darwin15.2.0
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables...
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking for style of include used by make... GNU
checking dependency style of gcc... gcc3
checking dependency style of gcc... gcc3
checking how to print strings... printf
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld
checking if the linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) is GNU ld... no
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm
checking the name lister (/usr/bin/nm) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 196608
checking how to convert x86_64-apple-darwin15.2.0 file names to x86_64-apple-darwin15.2.0 format... func_convert_file_noop
checking how to convert x86_64-apple-darwin15.2.0 file names to toolchain format... func_convert_file_noop
checking for /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld option to reload object files... -r
checking for objdump... no
checking how to recognize dependent libraries... pass_all
checking for dlltool... no
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... no
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm output from gcc object... ok
checking for sysroot... no
checking for a working dd... /bin/dd
checking how to truncate binary pipes... /bin/dd bs=4096 count=1
checking for mt... no
checking if : is a manifest tool... no
checking for dsymutil... dsymutil
checking for nmedit... nmedit
checking for lipo... lipo
checking for otool... otool
checking for otool64... no
checking for -single_module linker flag... yes
checking for -exported_symbols_list linker flag... yes
checking for -force_load linker flag... yes
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... yes
checking for gcc option to produce PIC... -fno-common -DPIC
checking if gcc PIC flag -fno-common -DPIC works... yes
checking if gcc static flag -static works... no
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld) supports shared libraries... yes
checking dynamic linker characteristics... darwin15.2.0 dyld
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... no
checking whether to build static libraries... yes
checking for getisax... no
checking whether byte ordering is bigendian... no
checking for inline... inline
checking whether the compiler supports -Werror... yes
checking size of long... 8
checking whether __SUNPRO_C is declared... no
checking whether __amd64 is declared... yes
checking whether the compiler supports -Wall... yes
checking whether the compiler supports -Wdeclaration-after-statement... yes
checking whether the compiler supports -fno-strict-aliasing... yes
checking for gcc option to support OpenMP... unsupported
checking whether the compiler supports -fvisibility=hidden... yes
checking whether the compiler supports -xldscope=hidden... no
checking whether to use Loongson MMI assembler... no
checking whether to use MMX intrinsics... yes
checking whether to use SSE2 intrinsics... yes
checking whether to use SSSE3 intrinsics... yes
checking whether to use VMX/Altivec intrinsics... no
checking whether to use ARM SIMD assembler... no
checking whether to use ARM NEON assembler... no
checking whether to use ARM IWMMXT intrinsics... no
checking whether to use MIPS DSPr2 assembler... no
checking whether to use GNU-style inline assembler... yes
checking for pkg-config... /usr/local/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking for pixman_version_string in -lpixman-1... no
checking for posix_memalign... yes
checking for sigaction... yes
checking for alarm... yes
checking sys/mman.h usability... yes
checking sys/mman.h presence... yes
checking for sys/mman.h... yes
checking for mmap... yes
checking for mprotect... yes
checking for getpagesize... yes
checking fenv.h usability... yes
checking fenv.h presence... yes
checking for fenv.h... yes
checking for feenableexcept in -lm... no
checking for gettimeofday... yes
checking sys/time.h usability... yes
checking sys/time.h presence... yes
checking for sys/time.h... yes
checking for library containing sqrtf... none required
checking for thread local storage (TLS) support... __thread
checking for pthreads... yes
checking for __attribute__((constructor))... yes
checking for __float128... no
checking for __builtin_clz... yes
checking for GCC vector extensions... no
checking for PNG... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating pixman-1.pc
config.status: creating pixman-1-uninstalled.pc
config.status: creating Makefile
config.status: creating pixman/Makefile
config.status: creating pixman/pixman-version.h
config.status: creating demos/Makefile
config.status: creating test/Makefile
config.status: creating config.h
config.status: config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands 
make -j2

Result :

/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in pixman
  CC       pixman.lo
  CC       pixman-access.lo
pixman.c:144:5: warning: unused typedef 'compile_time_assertion' [-Wunused-local-typedef]
    COMPILE_TIME_ASSERT (FAST_PATH_IS_OPAQUE == (1 << OPAQUE_SHIFT));
    ^
./pixman-private.h:1019:22: note: expanded from macro 'COMPILE_TIME_ASSERT'
    do { typedef int compile_time_assertion [(x)?1:-1]; } while (0)
                     ^
pixman-access.c:470:1: warning: unused variable '__dummy__a8r8g8b8' [-Wunused-const-variable]
MAKE_ACCESSORS(a8r8g8b8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:27:1: note: expanded from here
__dummy__a8r8g8b8
^
pixman-access.c:471:1: warning: unused variable '__dummy__x8r8g8b8' [-Wunused-const-variable]
MAKE_ACCESSORS(x8r8g8b8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:34:1: note: expanded from here
__dummy__x8r8g8b8
^
pixman-access.c:472:1: warning: unused variable '__dummy__a8b8g8r8' [-Wunused-const-variable]
MAKE_ACCESSORS(a8b8g8r8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:41:1: note: expanded from here
__dummy__a8b8g8r8
^
pixman-access.c:473:1: warning: unused variable '__dummy__x8b8g8r8' [-Wunused-const-variable]
MAKE_ACCESSORS(x8b8g8r8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:48:1: note: expanded from here
__dummy__x8b8g8r8
^
pixman-access.c:474:1: warning: unused variable '__dummy__x14r6g6b6' [-Wunused-const-variable]
MAKE_ACCESSORS(x14r6g6b6);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:55:1: note: expanded from here
__dummy__x14r6g6b6
^
pixman-access.c:475:1: warning: unused variable '__dummy__b8g8r8a8' [-Wunused-const-variable]
MAKE_ACCESSORS(b8g8r8a8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:62:1: note: expanded from here
__dummy__b8g8r8a8
^
pixman-access.c:476:1: warning: unused variable '__dummy__b8g8r8x8' [-Wunused-const-variable]
MAKE_ACCESSORS(b8g8r8x8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:69:1: note: expanded from here
__dummy__b8g8r8x8
^
pixman-access.c:477:1: warning: unused variable '__dummy__r8g8b8x8' [-Wunused-const-variable]
MAKE_ACCESSORS(r8g8b8x8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:76:1: note: expanded from here
__dummy__r8g8b8x8
^
pixman-access.c:478:1: warning: unused variable '__dummy__r8g8b8a8' [-Wunused-const-variable]
MAKE_ACCESSORS(r8g8b8a8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:83:1: note: expanded from here
__dummy__r8g8b8a8
^
pixman-access.c:479:1: warning: unused variable '__dummy__r8g8b8' [-Wunused-const-variable]
MAKE_ACCESSORS(r8g8b8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:90:1: note: expanded from here
__dummy__r8g8b8
^
pixman-access.c:480:1: warning: unused variable '__dummy__b8g8r8' [-Wunused-const-variable]
MAKE_ACCESSORS(b8g8r8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:97:1: note: expanded from here
__dummy__b8g8r8
^
pixman-access.c:481:1: warning: unused variable '__dummy__r5g6b5' [-Wunused-const-variable]
MAKE_ACCESSORS(r5g6b5);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:104:1: note: expanded from here
__dummy__r5g6b5
^
pixman-access.c:482:1: warning: unused variable '__dummy__b5g6r5' [-Wunused-const-variable]
MAKE_ACCESSORS(b5g6r5);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:111:1: note: expanded from here
__dummy__b5g6r5
^
pixman-access.c:483:1: warning: unused variable '__dummy__a1r5g5b5' [-Wunused-const-variable]
MAKE_ACCESSORS(a1r5g5b5);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:118:1: note: expanded from here
__dummy__a1r5g5b5
^
pixman-access.c:484:1: warning: unused variable '__dummy__x1r5g5b5' [-Wunused-const-variable]
MAKE_ACCESSORS(x1r5g5b5);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:125:1: note: expanded from here
__dummy__x1r5g5b5
^
pixman-access.c:485:1: warning: unused variable '__dummy__a1b5g5r5' [-Wunused-const-variable]
MAKE_ACCESSORS(a1b5g5r5);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:132:1: note: expanded from here
__dummy__a1b5g5r5
^
pixman-access.c:486:1: warning: unused variable '__dummy__x1b5g5r5' [-Wunused-const-variable]
MAKE_ACCESSORS(x1b5g5r5);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:139:1: note: expanded from here
__dummy__x1b5g5r5
^
pixman-access.c:487:1: warning: unused variable '__dummy__a4r4g4b4' [-Wunused-const-variable]
MAKE_ACCESSORS(a4r4g4b4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:146:1: note: expanded from here
__dummy__a4r4g4b4
^
pixman-access.c:488:1: warning: unused variable '__dummy__x4r4g4b4' [-Wunused-const-variable]
MAKE_ACCESSORS(x4r4g4b4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:153:1: note: expanded from here
__dummy__x4r4g4b4
^
pixman-access.c:489:1: warning: unused variable '__dummy__a4b4g4r4' [-Wunused-const-variable]
MAKE_ACCESSORS(a4b4g4r4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:160:1: note: expanded from here
__dummy__a4b4g4r4
^
pixman-access.c:490:1: warning: unused variable '__dummy__x4b4g4r4' [-Wunused-const-variable]
MAKE_ACCESSORS(x4b4g4r4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:167:1: note: expanded from here
__dummy__x4b4g4r4
^
pixman-access.c:491:1: warning: unused variable '__dummy__a8' [-Wunused-const-variable]
MAKE_ACCESSORS(a8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:174:1: note: expanded from here
__dummy__a8
^
pixman-access.c:492:1: warning: unused variable '__dummy__c8' [-Wunused-const-variable]
MAKE_ACCESSORS(c8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:181:1: note: expanded from here
__dummy__c8
^
pixman-access.c:493:1: warning: unused variable '__dummy__g8' [-Wunused-const-variable]
MAKE_ACCESSORS(g8);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:188:1: note: expanded from here
__dummy__g8
^
pixman-access.c:494:1: warning: unused variable '__dummy__r3g3b2' [-Wunused-const-variable]
MAKE_ACCESSORS(r3g3b2);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:195:1: note: expanded from here
__dummy__r3g3b2
^
pixman-access.c:495:1: warning: unused variable '__dummy__b2g3r3' [-Wunused-const-variable]
MAKE_ACCESSORS(b2g3r3);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:202:1: note: expanded from here
__dummy__b2g3r3
^
pixman-access.c:496:1: warning: unused variable '__dummy__a2r2g2b2' [-Wunused-const-variable]
MAKE_ACCESSORS(a2r2g2b2);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:209:1: note: expanded from here
__dummy__a2r2g2b2
^
pixman-access.c:497:1: warning: unused variable '__dummy__a2b2g2r2' [-Wunused-const-variable]
MAKE_ACCESSORS(a2b2g2r2);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:216:1: note: expanded from here
__dummy__a2b2g2r2
^
pixman-access.c:498:1: warning: unused variable '__dummy__x4a4' [-Wunused-const-variable]
MAKE_ACCESSORS(x4a4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:6:1: note: expanded from here
__dummy__x4a4
^
pixman-access.c:499:1: warning: unused variable '__dummy__a4' [-Wunused-const-variable]
MAKE_ACCESSORS(a4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:13:1: note: expanded from here
__dummy__a4
^
pixman-access.c:500:1: warning: unused variable '__dummy__g4' [-Wunused-const-variable]
MAKE_ACCESSORS(g4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:20:1: note: expanded from here
__dummy__g4
^
pixman-access.c:501:1: warning: unused variable '__dummy__c4' [-Wunused-const-variable]
MAKE_ACCESSORS(c4);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:27:1: note: expanded from here
__dummy__c4
^
pixman-access.c:502:1: warning: unused variable '__dummy__r1g2b1' [-Wunused-const-variable]
MAKE_ACCESSORS(r1g2b1);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:34:1: note: expanded from here
__dummy__r1g2b1
^
pixman-access.c:503:1: warning: unused variable '__dummy__b1g2r1' [-Wunused-const-variable]
MAKE_ACCESSORS(b1g2r1);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:41:1: note: expanded from here
__dummy__b1g2r1
^
pixman-access.c:504:1: warning: unused variable '__dummy__a1r1g1b1' [-Wunused-const-variable]
MAKE_ACCESSORS(a1r1g1b1);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:48:1: note: expanded from here
__dummy__a1r1g1b1
^
pixman-access.c:505:1: warning: unused variable '__dummy__a1b1g1r1' [-Wunused-const-variable]
MAKE_ACCESSORS(a1b1g1r1);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:55:1: note: expanded from here
__dummy__a1b1g1r1
^
pixman-access.c:506:1: warning: unused variable '__dummy__a1' [-Wunused-const-variable]
MAKE_ACCESSORS(a1);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:62:1: note: expanded from here
__dummy__a1
^
pixman-access.c:507:1: warning: unused variable '__dummy__g1' [-Wunused-const-variable]
MAKE_ACCESSORS(g1);
^
pixman-access.c:468:30: note: expanded from macro 'MAKE_ACCESSORS'
    static const void *const __dummy__ ## format
                             ^
<scratch space>:69:1: note: expanded from here
__dummy__g1
^
1 warning generated.
  CC       pixman-access-accessors.lo
38 warnings generated.
  CC       pixman-bits-image.lo
  CC       pixman-combine32.lo
  CC       pixman-combine-float.lo
  CC       pixman-conical-gradient.lo
  CC       pixman-filter.lo
  CC       pixman-x86.lo
  CC       pixman-mips.lo
  CC       pixman-arm.lo
  CC       pixman-ppc.lo
  CC       pixman-edge.lo
  CC       pixman-edge-accessors.lo
  CC       pixman-fast-path.lo
  CC       pixman-glyph.lo
  CC       pixman-general.lo
  CC       pixman-gradient-walker.lo
  CC       pixman-image.lo
  CC       pixman-implementation.lo
pixman-implementation.c:124:38: warning: comparison of constant 64 with expression of type 'const pixman_op_t' is always false [-Wtautological-constant-out-of-range-compare]
            if ((info->op == op || info->op == PIXMAN_OP_any)           &&
                                   ~~~~~~~~ ^  ~~~~~~~~~~~~~
1 warning generated.
  CC       pixman-linear-gradient.lo
  CC       pixman-matrix.lo
  CC       pixman-noop.lo
  CC       pixman-radial-gradient.lo
  CC       pixman-region16.lo
  CC       pixman-region32.lo
  CC       pixman-solid-fill.lo
  CC       pixman-timer.lo
  CC       pixman-trap.lo
  CC       pixman-utils.lo
  CC       libpixman_mmx_la-pixman-mmx.lo
  CC       libpixman_sse2_la-pixman-sse2.lo
pixman-mmx.c:69:71: warning: unknown attribute '__artificial__' ignored [-Wunknown-attributes]
extern __inline int __attribute__((__gnu_inline__, __always_inline__, __artificial__))
                                                                      ^
pixman-mmx.c:82:73: warning: unknown attribute '__artificial__' ignored [-Wunknown-attributes]
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
                                                                        ^
pixman-mmx.c:93:73: warning: unknown attribute '__artificial__' ignored [-Wunknown-attributes]
extern __inline __m64 __attribute__((__gnu_inline__, __always_inline__, __artificial__))
                                                                        ^
pixman-mmx.c:100:20: error: constraint 'K' expects an integer constant expression
        : "y" (__A), "K" (__N)
                          ^~~
3 warnings and 1 error generated.
make[2]: *** [libpixman_mmx_la-pixman-mmx.lo] Error 1
make[2]: *** Waiting for unfinished jobs....
pixman-sse2.c:380:1: warning: unused function 'save_128_write_combining' [-Wunused-function]
save_128_write_combining (__m128i* dst,
^
pixman-sse2.c:396:1: warning: unused function 'save_128_unaligned' [-Wunused-function]
save_128_unaligned (__m128i* dst,
^
2 warnings generated.
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2
Ghabry commented 8 years ago
checking build system type... x86_64-apple-darwin15.2.0
checking host system type... x86_64-apple-darwin15.2.0

You are not cross-compiling.

Output of

echo $TARGET_HOST

?

Does just running the build_android.sh not work? (only adjust download links of NDK, to take the MacOS one)

BlisterB commented 8 years ago

Oh I must have mistyping something oO. Problem solved, I'm continuing. (I'm re writing the script to separate download and building (some files are different depending on plateform). It will permit to use platform auto detection.

Ghabry commented 8 years ago

In theory everything after line 29 https://github.com/Ghabry/easyrpg-android-libs/blob/master/build_android.sh#L29 should be platform independend (assuming POSIX compliant).

Thx for fixing if it isn't :D

BlisterB commented 8 years ago

Hmm. I succeed to build the android toolchain (at least, there is no error thrown during this phase). But when I'm doing ndk-build in the android port, the compilation process well until the phase below :

[armeabi-v7a] SharedLibrary  : libmain.so
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: cannot find -llcf
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/cache.cpp:306: error: undefined reference to 'Data::system'
jni/src/../../../../src/game_actor.cpp:887: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:106: error: undefined reference to 'Data::items'
jni/src/../../../../src/game_actor.cpp:410: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:705: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:705: error: undefined reference to 'Data::battlecommands'
jni/src/../../../../src/game_actor.cpp:705: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/game_actor.cpp:879: error: undefined reference to 'Data::battleranimations'
jni/src/../../../../src/game_actor.cpp:879: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:65: error: undefined reference to 'RPG::SaveActor::Fixup()'
jni/src/../../../../src/game_actor.cpp:153: error: undefined reference to 'Data::items'
jni/src/../../../../src/game_actor.cpp:165: error: undefined reference to 'Data::items'
jni/src/../../../../src/util_macro.h:32: error: undefined reference to 'Data::classes'
jni/src/../../../../src/util_macro.h:32: error: undefined reference to 'Data::classes'
jni/src/../../../../src/util_macro.h:32: error: undefined reference to 'Data::classes'
jni/src/../../../../src/util_macro.h:32: error: undefined reference to 'Data::items'
jni/src/../../../../src/util_macro.h:32: error: undefined reference to 'Data::classes'
jni/src/../../../../src/game_actor.cpp:579: error: undefined reference to 'Data::skills'
jni/src/../../../../src/game_actor.cpp:631: error: undefined reference to 'Data::battlecommands'
jni/src/../../../../src/game_actor.cpp:631: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/game_actor.cpp:45: error: undefined reference to 'RPG::SaveActor::Setup(int)'
jni/src/../../../../src/game_actor.cpp:788: error: undefined reference to 'Data::battlecommands'
jni/src/../../../../src/game_actor.cpp:557: error: undefined reference to 'Data::skills'
jni/src/../../../../src/game_actor.cpp:557: error: undefined reference to 'Data::terms'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::terms'
jni/src/../../../../src/game_battle.cpp:130: error: undefined reference to 'Data::animations'
jni/src/../../../../src/game_battle.cpp:137: error: undefined reference to 'Data::animations'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_bvector.h:889: error: undefined reference to 'Data::troops'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:2369: error: undefined reference to 'Data::terms'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:2369: error: undefined reference to 'Data::terms'
jni/src/../../../../src/game_battlealgorithm.cpp:1109: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::animations'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/ext/new_allocator.h:120: error: undefined reference to 'Data::animations'
jni/src/../../../../src/game_battler.cpp:266: error: undefined reference to 'Data::skills'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/ext/new_allocator.h:102: error: undefined reference to 'Data::skills'
jni/src/../../../../src/game_character.cpp:59: error: undefined reference to 'RPG::MoveRoute::MoveRoute()'
jni/src/../../../../src/game_commonevent.cpp:78: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:82: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:86: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:90: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:108: error: undefined reference to 'RPG::SaveEventData::SaveEventData()'
jni/src/../../../../src/game_enemy.cpp:57: error: undefined reference to 'Data::enemies'
jni/src/../../../../src/game_enemy.cpp:151: error: undefined reference to 'Data::enemies'
jni/src/../../../../src/game_enemy.cpp:28: error: undefined reference to 'RPG::EnemyAction::EnemyAction()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/ext/new_allocator.h:120: error: undefined reference to 'Data::troops'
jni/src/../../../../src/game_event.cpp:315: error: undefined reference to 'RPG::SaveMapEvent::Fixup(RPG::EventPage const&)'
jni/src/../../../../src/game_event.cpp:41: error: undefined reference to 'RPG::SaveMapEvent::SaveMapEvent()'
jni/src/../../../../src/game_event.cpp:57: error: undefined reference to 'RPG::SaveMapEvent::SaveMapEvent()'
jni/src/../../../../src/game_interpreter.cpp:1123: error: undefined reference to 'RPG::Music::Music()'
jni/src/../../../../src/game_interpreter.cpp:1140: error: undefined reference to 'RPG::Sound::Sound()'
jni/src/../../../../src/game_interpreter.cpp:196: error: undefined reference to 'RPG::EventCommand::EventCommand()'
jni/src/../../../../src/game_interpreter_map.cpp:145: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/game_interpreter_map.cpp:152: error: undefined reference to 'RPG::MoveCommand::MoveCommand()'
jni/src/../../../../src/game_interpreter_map.cpp:515: error: undefined reference to 'RPG::Music::Music()'
jni/src/../../../../src/game_interpreter_map.cpp:527: error: undefined reference to 'RPG::Sound::Sound()'
jni/src/../../../../src/game_interpreter_map.cpp:1252: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/game_interpreter_map.cpp:1009: error: undefined reference to 'RPG::MoveRoute::MoveRoute()'
jni/src/../../../../src/game_interpreter_map.cpp:107: error: undefined reference to 'RPG::SaveEventCommands::SaveEventCommands()'
jni/src/../../../../src/game_interpreter_map.cpp:80: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_interpreter_map.cpp:81: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_interpreter_map.cpp:82: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_interpreter_map.cpp:83: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/game_interpreter_map.cpp:86: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_map.cpp:611: error: undefined reference to 'Data::data'
jni/src/../../../../src/game_map.cpp:625: error: undefined reference to 'Data::data'
jni/src/../../../../src/game_map.cpp:590: error: undefined reference to 'Data::data'
jni/src/../../../../src/game_map.cpp:950: error: undefined reference to 'Data::chipsets'
jni/src/../../../../src/game_map.cpp:1001: error: undefined reference to 'Data::treemap'
jni/src/../../../../src/game_map.cpp:300: error: undefined reference to 'Data::treemap'
jni/src/../../../../src/game_map.cpp:761: error: undefined reference to 'Data::treemap'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::treemap'
jni/src/../../../../src/game_map.cpp:483: error: undefined reference to 'Data::data'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:1024: error: undefined reference to 'Data::chipsets'
jni/src/../../../../src/game_map.cpp:213: error: undefined reference to 'LMU_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/game_map.cpp:215: error: undefined reference to 'LMU_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/game_map.cpp:220: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/game_map.cpp:187: error: undefined reference to 'RPG::SaveMapInfo::Fixup(RPG::Map const&)'
jni/src/../../../../src/game_map.cpp:291: error: undefined reference to 'RPG::SaveCommonEvent::SaveCommonEvent()'
jni/src/../../../../src/game_party.cpp:33: error: undefined reference to 'RPG::SaveInventory::Setup()'
jni/src/../../../../src/game_party.cpp:77: error: undefined reference to 'Data::system'
jni/src/../../../../src/game_player.cpp:41: error: undefined reference to 'RPG::Music::Music()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SavePicture::SavePicture()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SavePicture::SavePicture()'
jni/src/../../../../src/game_system.cpp:34: error: undefined reference to 'RPG::SaveSystem::Setup()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SaveTarget::SaveTarget()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SaveTarget::SaveTarget()'
jni/src/../../../../src/game_vehicle.cpp:240: error: undefined reference to 'Data::system'
jni/src/../../../../src/main_data.cpp:100: error: undefined reference to 'RPG::Save::Save()'
jni/src/../../../../src/main_data.cpp:80: error: undefined reference to 'RPG::Save::Save()'
jni/src/../../../../src/player.cpp:578: error: undefined reference to 'Data::Clear()'
jni/src/../../../../src/player.cpp:610: error: undefined reference to 'LDB_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:613: error: undefined reference to 'LMT_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:599: error: undefined reference to 'LDB_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/player.cpp:602: error: undefined reference to 'LMT_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/player.cpp:603: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/player.cpp:611: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/player.cpp:613: error: undefined reference to 'LMT_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:614: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/player.cpp:602: error: undefined reference to 'LMT_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/player.cpp:696: error: undefined reference to 'ReaderUtil::GetEncoding(std::string const&)'
jni/src/../../../../src/player.cpp:703: error: undefined reference to 'ReaderUtil::DetectEncoding(std::string const&)'
jni/src/../../../../src/player.cpp:709: error: undefined reference to 'ReaderUtil::GetLocaleEncoding()'
jni/src/../../../../src/player.cpp:559: error: undefined reference to 'RPG::Save::Setup()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/ext/new_allocator.h:110: error: undefined reference to 'Data::system'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/ext/new_allocator.h:110: error: undefined reference to 'Data::switches'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/ext/new_allocator.h:110: error: undefined reference to 'Data::variables'
jni/src/../../../../src/player.cpp:508: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:517: error: undefined reference to 'INIReader::INIReader(std::string)'
jni/src/../../../../src/player.cpp:518: error: undefined reference to 'INIReader::ParseError() const'
jni/src/../../../../src/player.cpp:519: error: undefined reference to 'INIReader::Get(std::string, std::string, std::string)'
jni/src/../../../../src/player.cpp:520: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:521: error: undefined reference to 'INIReader::Get(std::string, std::string, std::string)'
jni/src/../../../../src/player.cpp:636: error: undefined reference to 'LSD_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:643: error: undefined reference to 'RPG::SaveSystem::Fixup()'
jni/src/../../../../src/platform/registry_wine.cpp:57: error: undefined reference to 'INIReader::INIReader(std::string)'
jni/src/../../../../src/platform/registry_wine.cpp:60: error: undefined reference to 'INIReader::ParseError() const'
jni/src/../../../../src/platform/registry_wine.cpp:61: error: undefined reference to 'INIReader::Get(std::string, std::string, std::string)'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:102: error: undefined reference to 'Data::troops'
jni/src/../../../../src/scene_battle_rpg2k3.cpp:763: error: undefined reference to 'Data::battlecommands'
jni/src/../../../../src/scene_file.cpp:63: error: undefined reference to 'LSD_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/scene_gamebrowser.cpp:46: error: undefined reference to 'Data::Clear()'
jni/src/../../../../src/scene_save.cpp:61: error: undefined reference to 'RPG::SaveTitle::SaveTitle()'
jni/src/../../../../src/scene_save.cpp:104: error: undefined reference to 'LSD_Reader::Save(std::string const&, RPG::Save const&, std::string const&)'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::battleranimations'
jni/src/../../../../src/sprite_battler.cpp:145: error: undefined reference to 'Data::battleranimations'
jni/src/../../../../src/window_battlecommand.cpp:164: error: undefined reference to 'RPG::BattleCommand::BattleCommand()'
jni/src/../../../../src/window_varlist.cpp:70: error: undefined reference to 'Data::switches'
jni/src/../../../../src/window_varlist.cpp:70: error: undefined reference to 'Data::variables'
collect2: error: ld returned 1 exit status
make: *** [obj/local/armeabi/libmain.so] Error 1
make: *** Waiting for unfinished jobs....
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: cannot find -llcf
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/cache.cpp:306: error: undefined reference to 'Data::system'
jni/src/../../../../src/game_actor.cpp:887: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:106: error: undefined reference to 'Data::items'
jni/src/../../../../src/game_actor.cpp:409: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:674: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:674: error: undefined reference to 'Data::battlecommands'
jni/src/../../../../src/game_actor.cpp:674: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/game_actor.cpp:879: error: undefined reference to 'Data::actors'
jni/src/../../../../src/game_actor.cpp:879: error: undefined reference to 'Data::battleranimations'
jni/src/../../../../src/game_actor.cpp:65: error: undefined reference to 'RPG::SaveActor::Fixup()'
jni/src/../../../../src/game_actor.cpp:154: error: undefined reference to 'Data::items'
jni/src/../../../../src/game_actor.cpp:166: error: undefined reference to 'Data::items'
jni/src/../../../../src/game_actor.cpp:198: error: undefined reference to 'Data::classes'
jni/src/../../../../src/game_actor.cpp:213: error: undefined reference to 'Data::classes'
jni/src/../../../../src/game_actor.cpp:228: error: undefined reference to 'Data::classes'
jni/src/../../../../src/game_actor.cpp:228: error: undefined reference to 'Data::items'
jni/src/../../../../src/game_actor.cpp:252: error: undefined reference to 'Data::classes'
jni/src/../../../../src/game_actor.cpp:579: error: undefined reference to 'Data::skills'
jni/src/../../../../src/game_actor.cpp:590: error: undefined reference to 'Data::battlecommands'
jni/src/../../../../src/game_actor.cpp:590: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/game_actor.cpp:45: error: undefined reference to 'RPG::SaveActor::Setup(int)'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:920: error: undefined reference to 'Data::battlecommands'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::skills'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::terms'
/Users/mehdi/easyrpg/easyrpg-android-libs/armeabi-v7a-toolchain/include/boost/core/checked_delete.hpp:34: error: undefined reference to 'Data::animations'
/Users/mehdi/easyrpg/easyrpg-android-libs/armeabi-v7a-toolchain/include/boost/core/checked_delete.hpp:34: error: undefined reference to 'Data::animations'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_bvector.h:889: error: undefined reference to 'Data::troops'
jni/src/../../../../src/game_battlealgorithm.cpp:503: error: undefined reference to 'Data::terms'
jni/src/../../../../src/game_battlealgorithm.cpp:877: error: undefined reference to 'Data::terms'
jni/src/../../../../src/game_battlealgorithm.cpp:903: error: undefined reference to 'Data::terms'
jni/src/../../../../src/game_battlealgorithm.cpp:1109: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::animations'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::states'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:911: error: undefined reference to 'Data::animations'
jni/src/../../../../src/game_battler.cpp:266: error: undefined reference to 'Data::skills'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/ext/new_allocator.h:102: error: undefined reference to 'Data::skills'
jni/src/../../../../src/game_character.cpp:59: error: undefined reference to 'RPG::MoveRoute::MoveRoute()'
jni/src/../../../../src/game_commonevent.cpp:78: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:82: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:86: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:90: error: undefined reference to 'Data::commonevents'
jni/src/../../../../src/game_commonevent.cpp:108: error: undefined reference to 'RPG::SaveEventData::SaveEventData()'
jni/src/../../../../src/game_enemy.cpp:56: error: undefined reference to 'Data::enemies'
jni/src/../../../../src/game_enemy.cpp:150: error: undefined reference to 'Data::enemies'
jni/src/../../../../src/game_enemy.cpp:28: error: undefined reference to 'RPG::EnemyAction::EnemyAction()'
jni/src/../../../../src/game_enemyparty.cpp:50: error: undefined reference to 'Data::troops'
jni/src/../../../../src/game_event.cpp:315: error: undefined reference to 'RPG::SaveMapEvent::Fixup(RPG::EventPage const&)'
jni/src/../../../../src/game_event.cpp:41: error: undefined reference to 'RPG::SaveMapEvent::SaveMapEvent()'
jni/src/../../../../src/game_event.cpp:57: error: undefined reference to 'RPG::SaveMapEvent::SaveMapEvent()'
jni/src/../../../../src/game_interpreter.cpp:1123: error: undefined reference to 'RPG::Music::Music()'
jni/src/../../../../src/game_interpreter.cpp:1140: error: undefined reference to 'RPG::Sound::Sound()'
jni/src/../../../../src/game_interpreter.cpp:196: error: undefined reference to 'RPG::EventCommand::EventCommand()'
jni/src/../../../../src/game_interpreter_map.cpp:145: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/game_interpreter_map.cpp:152: error: undefined reference to 'RPG::MoveCommand::MoveCommand()'
jni/src/../../../../src/game_interpreter_map.cpp:515: error: undefined reference to 'RPG::Music::Music()'
jni/src/../../../../src/game_interpreter_map.cpp:527: error: undefined reference to 'RPG::Sound::Sound()'
jni/src/../../../../src/game_interpreter_map.cpp:1252: error: undefined reference to 'Data::terrains'
jni/src/../../../../src/game_interpreter_map.cpp:1009: error: undefined reference to 'RPG::MoveRoute::MoveRoute()'
jni/src/../../../../src/game_interpreter_map.cpp:107: error: undefined reference to 'RPG::SaveEventCommands::SaveEventCommands()'
jni/src/../../../../src/game_interpreter_map.cpp:80: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_interpreter_map.cpp:81: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_interpreter_map.cpp:82: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_interpreter_map.cpp:83: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/game_interpreter_map.cpp:86: error: undefined reference to 'LcfReader::IntSize(unsigned int)'
jni/src/../../../../src/game_map.cpp:611: error: undefined reference to 'Data::data'
jni/src/../../../../src/game_map.cpp:625: error: undefined reference to 'Data::data'
jni/src/../../../../src/game_map.cpp:590: error: undefined reference to 'Data::data'
jni/src/../../../../src/game_map.cpp:950: error: undefined reference to 'Data::chipsets'
jni/src/../../../../src/game_map.cpp:1001: error: undefined reference to 'Data::treemap'
jni/src/../../../../src/game_map.cpp:301: error: undefined reference to 'Data::treemap'
jni/src/../../../../src/game_map.cpp:761: error: undefined reference to 'Data::treemap'
jni/src/../../../../src/game_map.cpp:829: error: undefined reference to 'Data::treemap'
jni/src/../../../../src/game_map.cpp:483: error: undefined reference to 'Data::data'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_vector.h:1024: error: undefined reference to 'Data::chipsets'
jni/src/../../../../src/game_map.cpp:213: error: undefined reference to 'LMU_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/game_map.cpp:215: error: undefined reference to 'LMU_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/game_map.cpp:220: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/game_map.cpp:187: error: undefined reference to 'RPG::SaveMapInfo::Fixup(RPG::Map const&)'
jni/src/../../../../src/game_map.cpp:291: error: undefined reference to 'RPG::SaveCommonEvent::SaveCommonEvent()'
jni/src/../../../../src/game_party.cpp:33: error: undefined reference to 'RPG::SaveInventory::Setup()'
jni/src/../../../../src/game_party.cpp:76: error: undefined reference to 'Data::system'
jni/src/../../../../src/game_player.cpp:41: error: undefined reference to 'RPG::Music::Music()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SavePicture::SavePicture()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SavePicture::SavePicture()'
jni/src/../../../../src/game_system.cpp:34: error: undefined reference to 'RPG::SaveSystem::Setup()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SaveTarget::SaveTarget()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/stl_construct.h:75: error: undefined reference to 'RPG::SaveTarget::SaveTarget()'
jni/src/../../../../src/game_vehicle.cpp:240: error: undefined reference to 'Data::system'
jni/src/../../../../src/main_data.cpp:100: error: undefined reference to 'RPG::Save::Save()'
jni/src/../../../../src/main_data.cpp:80: error: undefined reference to 'RPG::Save::Save()'
jni/src/../../../../src/player.cpp:578: error: undefined reference to 'Data::Clear()'
jni/src/../../../../src/player.cpp:610: error: undefined reference to 'LDB_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:613: error: undefined reference to 'LMT_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:599: error: undefined reference to 'LDB_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/player.cpp:602: error: undefined reference to 'LMT_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/player.cpp:603: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/player.cpp:611: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/player.cpp:613: error: undefined reference to 'LMT_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:614: error: undefined reference to 'LcfReader::GetError()'
jni/src/../../../../src/player.cpp:602: error: undefined reference to 'LMT_Reader::LoadXml(std::string const&)'
jni/src/../../../../src/player.cpp:696: error: undefined reference to 'ReaderUtil::GetEncoding(std::string const&)'
jni/src/../../../../src/player.cpp:703: error: undefined reference to 'ReaderUtil::DetectEncoding(std::string const&)'
jni/src/../../../../src/player.cpp:709: error: undefined reference to 'ReaderUtil::GetLocaleEncoding()'
jni/src/../../../../src/player.cpp:559: error: undefined reference to 'RPG::Save::Setup()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::system'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::switches'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::variables'
jni/src/../../../../src/player.cpp:508: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:517: error: undefined reference to 'INIReader::INIReader(std::string)'
jni/src/../../../../src/player.cpp:518: error: undefined reference to 'INIReader::ParseError() const'
jni/src/../../../../src/player.cpp:519: error: undefined reference to 'INIReader::Get(std::string, std::string, std::string)'
jni/src/../../../../src/player.cpp:520: error: undefined reference to 'ReaderUtil::Recode(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:521: error: undefined reference to 'INIReader::Get(std::string, std::string, std::string)'
jni/src/../../../../src/player.cpp:636: error: undefined reference to 'LSD_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/player.cpp:643: error: undefined reference to 'RPG::SaveSystem::Fixup()'
jni/src/../../../../src/platform/registry_wine.cpp:57: error: undefined reference to 'INIReader::INIReader(std::string)'
jni/src/../../../../src/platform/registry_wine.cpp:60: error: undefined reference to 'INIReader::ParseError() const'
jni/src/../../../../src/platform/registry_wine.cpp:61: error: undefined reference to 'INIReader::Get(std::string, std::string, std::string)'
jni/src/../../../../src/scene_battle.cpp:83: error: undefined reference to 'Data::troops'
jni/src/../../../../src/scene_battle_rpg2k3.cpp:763: error: undefined reference to 'Data::battlecommands'
jni/src/../../../../src/scene_file.cpp:63: error: undefined reference to 'LSD_Reader::Load(std::string const&, std::string const&)'
jni/src/../../../../src/scene_gamebrowser.cpp:46: error: undefined reference to 'Data::Clear()'
jni/src/../../../../src/scene_save.cpp:61: error: undefined reference to 'RPG::SaveTitle::SaveTitle()'
jni/src/../../../../src/scene_save.cpp:104: error: undefined reference to 'LSD_Reader::Save(std::string const&, RPG::Save const&, std::string const&)'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_string.h:249: error: undefined reference to 'Data::battleranimations'
jni/src/../../../../src/sprite_battler.cpp:145: error: undefined reference to 'Data::battleranimations'
jni/src/../../../../src/window_battlecommand.cpp:164: error: undefined reference to 'RPG::BattleCommand::BattleCommand()'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_ios.h:49: error: undefined reference to 'Data::switches'
/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/basic_ios.h:49: error: undefined reference to 'Data::variables'
collect2: error: ld returned 1 exit status
make: *** [obj/local/armeabi-v7a/libmain.so] Error 1
Ghabry commented 8 years ago

You didn't compile liblcf. This is an extra step because this is our lib and must be kept up-to-date. But for convinience there is build_liblcf in the Android directory. Not 100% sure if the script will work error free because we use a slightly modified one in Jenkins.

Don't forget step 2 as mentioned in the README (guess you did this because your build succeded except linker errors)

Btw what is your opinion about the new android build system? Is it easier or more difficult to use? :D The big advantage for me is that updating is much simpler now.

BlisterB commented 8 years ago

Oh, I executed the build/libcf.sh but I just realized you forgot a cd liblcf lol, I'm correcting that, thank you for the tip !

BlisterB commented 8 years ago

I will tell you my opinion when I'll be able to run it :p . lol I'm jocking yes it seems to be really more convenient ! More modular and understandable !

But I still have the problem describe above. To be sure : the liblcf has to be clone in easyrpg-android-libs ? So If I understood : we have : /easyrpg-android-libs/liblcf Then I go in the liblcf dir and I use the commands described in build_libcf.sh ?

Ghabry commented 8 years ago

The error comes from armeabi-v7a. ... My mistake, forgot adjusting the directories like in build_android for v7a (which is handled special because it's just ARM with a few more features). Not tested, try replacing Line 36 (CPPFLAGS) in build_liblcf with:

export PLATFORM_PREFIX_ARM=$WORKSPACE/armeabi-toolchain
export PLATFORM_PREFIX=$WORKSPACE/armeabi-v7a-toolchain
export CPPFLAGS="-I$PLATFORM_PREFIX_ARM/include -I$PLATFORM_PREFIX/include -I$NDK_ROOT/sources/android/support/include -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3"
export LDFLAGS="-L$PLATFORM_PREFIX_ARM/lib -L$PLATFORM_PREFIX/lib"
export PKG_CONFIG_PATH=$PLATFORM_PREFIX/lib/pkgconfig
BlisterB commented 8 years ago

I just saw the armeabi-v7a :p I'll test that !

Ghabry commented 8 years ago

Not completely sure but I think the PLATFORM_PREFIX entries should be before PLATFORM_PREFIX_ARM because we want to prefer the v7a libs over the normal ARM libs. But it is linked static in Player so it probably doesn't matter at all because the Player does the correct linking via ndk-build. Lets get technical ;)

BlisterB commented 8 years ago

Yay it worked !

But there is another error lol.

/Users/mehdi/easyrpg/easyrpg-android-libs/android-ndk-r10e/toolchains/mipsel-linux-android-4.8/prebuilt/darwin-x86_64/bin/../lib/gcc/mipsel-linux-android/4.8/../../../../mipsel-linux-android/bin/ld: cannot find -lmad 

I just saw your new message, i'm studying that.

Ghabry commented 8 years ago

That's a bug in the libmad assembler code for mips (too old, doesn't compile anymore). Did you use the special libmad build line for mips? (FPM="-DFPM_DEFAULT") https://github.com/Ghabry/easyrpg-android-libs/blob/master/build_android.sh#L434

Note that you can save lots of compile time by removing all targets that you don't need in the Player build. See "Player / builds / android / jni / Application.mk "

APP_ABI := armeabi armeabi-v7a x86 mips

Depending on your Android system you only need armeabi-v7a or x86. (The Jenkins pull request builder only compiles for armeabi-v7a).

BlisterB commented 8 years ago

... it works :')

Thank you Ghabry ! I thought to delete those plateforms in Application.mk but I wasn't sure it would work lol. The line 434 you are talking about is exactly the same on my file.

If the bug with libmad isn't our fault I propose to ignore it. I'll precise it in the documentation. I work on a fork of your repository to provide a more "noob friendly" version of the build based on your work, are you interested on a pull request or do you prefer to keep your organization as it is ?

Ghabry commented 8 years ago

well the build_android.sh is used to generate the toolchain for Jenkins for all Android platforms (x86, ARM and Mips), so line 434 works.

Yeah, make a pull request, then I can review it. :D