SDL2 on android. FATAL EXCEPTION!

Hi,

I’m Chris, a graduate programmer who’s main language is C++.
I am working on a game which is currently PC only, I want to do something about that and have an android version.
And so I’m trying to get SDL2 working for android so I have been following this set-up guide: http://www.dinomage.com/2013/01/howto-sdl-on-android/

However, where it says I should have a nice working project… I do not. Instead I have a fatal exception.

Code:

08-20 11:48:46.684: D/dalvikvm(429): Trying to load lib /data/data/org.libsdl.app/lib/libSDL2.so 0x40512fb0
08-20 11:48:46.684: D/dalvikvm(429): Added shared lib /data/data/org.libsdl.app/lib/libSDL2.so 0x40512fb0
08-20 11:48:46.684: W/dalvikvm(429): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lorg/libsdl/app/SDLActivity;
08-20 11:48:46.684: W/dalvikvm(429): Class init failed in newInstance call (Lorg/libsdl/app/SDLActivity;)
08-20 11:48:46.684: D/AndroidRuntime(429): Shutting down VM
08-20 11:48:46.684: W/dalvikvm(429): threadid=1: thread exiting with uncaught exception (group=0x40015560)
08-20 11:48:46.713: E/AndroidRuntime(429): FATAL EXCEPTION: main
08-20 11:48:46.713: E/AndroidRuntime(429): java.lang.ExceptionInInitializerError
08-20 11:48:46.713: E/AndroidRuntime(429): at java.lang.Class.newInstanceImpl(Native Method)
08-20 11:48:46.713: E/AndroidRuntime(429): at java.lang.Class.newInstance(Class.java:1409)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.os.Handler.dispatchMessage(Handler.java:99)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.os.Looper.loop(Looper.java:130)
08-20 11:48:46.713: E/AndroidRuntime(429): at android.app.ActivityThread.main(ActivityThread.java:3683)
08-20 11:48:46.713: E/AndroidRuntime(429): at java.lang.reflect.Method.invokeNative(Native Method)
08-20 11:48:46.713: E/AndroidRuntime(429): at java.lang.reflect.Method.invoke(Method.java:507)
08-20 11:48:46.713: E/AndroidRuntime(429): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-20 11:48:46.713: E/AndroidRuntime(429): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-20 11:48:46.713: E/AndroidRuntime(429): at dalvik.system.NativeStart.main(Native Method)
08-20 11:48:46.713: E/AndroidRuntime(429): Caused by: java.lang.UnsatisfiedLinkError: Couldn’t load main: findLibrary returned null
08-20 11:48:46.713: E/AndroidRuntime(429): at java.lang.Runtime.loadLibrary(Runtime.java:429)
08-20 11:48:46.713: E/AndroidRuntime(429): at java.lang.System.loadLibrary(System.java:554)
08-20 11:48:46.713: E/AndroidRuntime(429): at org.libsdl.app.SDLActivity.(SDLActivity.java:60)

Can anyone shed any light on this situation?

Thanks in advance.
Chris

That looks like it’s failing to find main.so, which is the shared library
that is created from your app code by ndk-build. Have you definitely run
ndk-build on your project?

Jonny DOn Tue, Aug 20, 2013 at 7:59 AM, Magusware wrote:

**
Hi,

I’m Chris, a graduate programmer who’s main language is C++.
I am working on a game which is currently PC only, I want to do something
about that and have an android version.
And so I’m trying to get SDL2 working for android so I have been following
this set-up guide: http://www.dinomage.com/2013/01/howto-sdl-on-android/

However, where it says I should have a nice working project… I do not.
Instead I have a fatal exception.

Code:

08-20 11:48:46.684: D/dalvikvm(429): Trying to load lib
/data/data/org.libsdl.app/lib/libSDL2.so 0x40512fb0
08-20 11:48:46.684: D/dalvikvm(429): Added shared lib
/data/data/org.libsdl.app/lib/libSDL2.so 0x40512fb0
08-20 11:48:46.684: W/dalvikvm(429): Exception
Ljava/lang/UnsatisfiedLinkError; thrown while initializing
Lorg/libsdl/app/SDLActivity;
08-20 11:48:46.684: W/dalvikvm(429): Class init failed in newInstance call
(Lorg/libsdl/app/SDLActivity;)
08-20 11:48:46.684: D/AndroidRuntime(429): Shutting down VM
08-20 11:48:46.684: W/dalvikvm(429): threadid=1: thread exiting with
uncaught exception (group=0x40015560)
08-20 11:48:46.713: E/AndroidRuntime(429): FATAL EXCEPTION: main
08-20 11:48:46.713: E/AndroidRuntime(429):
java.lang.ExceptionInInitializerError
08-20 11:48:46.713: E/AndroidRuntime(429): at
java.lang.Class.newInstanceImpl(Native Method)
08-20 11:48:46.713: E/AndroidRuntime(429): at
java.lang.Class.newInstance(Class.java:1409)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.app.Instrumentation.newActivity(Instrumentation.java:1021)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1561)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.os.Handler.dispatchMessage(Handler.java:99)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.os.Looper.loop(Looper.java:130)
08-20 11:48:46.713: E/AndroidRuntime(429): at
android.app.ActivityThread.main(ActivityThread.java:3683)
08-20 11:48:46.713: E/AndroidRuntime(429): at
java.lang.reflect.Method.invokeNative(Native Method)
08-20 11:48:46.713: E/AndroidRuntime(429): at
java.lang.reflect.Method.invoke(Method.java:507)
08-20 11:48:46.713: E/AndroidRuntime(429): at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
08-20 11:48:46.713: E/AndroidRuntime(429): at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
08-20 11:48:46.713: E/AndroidRuntime(429): at
dalvik.system.NativeStart.main(Native Method)
08-20 11:48:46.713: E/AndroidRuntime(429): Caused by:
java.lang.UnsatisfiedLinkError: Couldn’t load main: findLibrary returned
null
08-20 11:48:46.713: E/AndroidRuntime(429): at
java.lang.Runtime.loadLibrary(Runtime.java:429)
08-20 11:48:46.713: E/AndroidRuntime(429): at
java.lang.System.loadLibrary(System.java:554)
08-20 11:48:46.713: E/AndroidRuntime(429): at
org.libsdl.app.SDLActivity.**(SDLActivity.java:60)

Can anyone shed any light on this situation?

Thanks in advance.
Chris


SDL mailing list
SDL at lists.libsdl.org
http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

Yes I did. Took some fiddling around with to actually get it to run though.

When I was running ndk-build it went so fast I couldn’t see that it was actually erroring.

Code:
Install : libSDL2.so => libs/armeabi/libSDL2.so
"Compile thumb : main <= SDL_android_main.c
"Compile++ thumb : main <= main.cpp
SharedLibrary : libmain.so
F:/SDKs/Android/NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/windows-x86_64
/bin/…/lib/gcc/arm-linux-androideabi/4.6/…/…/…/…/arm-linux-androideabi/bin/
ld.exe: M:\Projects\Android\AndroidApp/obj/local/armeabi/objs/main/__/SDL/src/ma
in/android/SDL_android_main.o: in function Java_org_libsdl_app_SDLActivity_nativ
eInit:M:\Projects\Android\AndroidApp/jni/src/…/SDL/src/main/android/SDL_android
_main.c:30: error: undefined reference to 'SDL_main’
collect2: ld returned 1 exit status
make: *** [M:\Projects\Android\AndroidApp/obj/local/armeabi/libmain.so] Error 1

I think I solved the issue. I had to make my main.cpp look like this:

Code:
extern “C”
{
int SDL_main(int argc, char* argv[])
{
return 0;
}
}

what it used to be.

Code:
int SDL_main(int argc, char* argv[])
{
return 0;
}

Does this mean I’m going to have to wrap all my code in extern “C”?

[/code]

For anyone else who wants to know the answer to my previous question. The answer is no, only needed it on the entry point.