Game crash on Android-L firmware (problems with libcrystax.a)

Hi there,

I have a problem when run game on new firmware Android-L, game crash when launch game.
Game can runable on others firmware.

Here is the error logs:
08-05 11:23:06.472: E/AndroidRuntime(6901): FATAL EXCEPTION: Thread-421

08-05 11:23:06.472: E/AndroidRuntime(6901): Process: com.gameloft.android.ANMP.GloftWBHM, PID: 6901

08-05 11:23:06.472: E/AndroidRuntime(6901): java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol “__swsetup” referenced by “libUnrealEngine3.so”…

08-05 11:23:06.472: E/AndroidRuntime(6901): at java.lang.Runtime.load(Runtime.java:333)

08-05 11:23:06.472: E/AndroidRuntime(6901): at java.lang.System.load(System.java:596)

08-05 11:23:06.472: E/AndroidRuntime(6901): at com.gameloft.android.ANMP.GloftWBHM.Game.loadAlternativeLib(Unknown Source)

08-05 11:23:06.472: E/AndroidRuntime(6901): at com.gameloft.android.ANMP.GloftWBHM.Game.loadLib(Unknown Source)

08-05 11:23:06.472: E/AndroidRuntime(6901): at com.gameloft.android.ANMP.GloftWBHM.installer.GameInstaller.run(Unknown Source)

08-05 11:23:06.472: E/AndroidRuntime(6901): at java.lang.Thread.run(Thread.java:818)

08-05 11:23:06.473: I/am_crash(576): [6901,0,com.gameloft.android.ANMP.GloftWBHM,8961092,java.lang.UnsatisfiedLinkError,dlopen failed: cannot locate symbol “__swsetup” referenced by “libUnrealEngine3.so”…,Runtime.java,333]

The game use:
ANDROID_NDK = android-ndk-r7
Android_ndk_platform = android-8

I occurs because the game can not locate symbol “__swsetup” on the lib libcrystax.a which is linked into “libUnrealEngine3.so”.

I try to unlink the libcrystax.a from the “libUnrealEngine3.so” and found that the game can load lib successfully.

I visited the link CrystaX and download the ndk crystax source to check that function.

I found that some functions are used without definitions in android-ndk-r8-crystax-1\sources\crystax\src\stdio\local.h file and other files in crystax source, such as:

extern int __swsetup(FILE *);

extern int __sflags(const char *, int *);

extern void __smakebuf(FILE *);

On android-L firmware, the game can not understand those functions, but on other firmware, the game can run normally.
I try to define those function with empty body in my source and the game is runable on Android-L firmware.

I don’t know why those functions are passed in other firmware of android (4.4 and older firmware), and failed in Android-L

Because the game need the crystax lib but I don’t have any solutions to fix this issue at this time.

Did anyone meet it?
How can I get/modify the crystax lib to support Android-L firmware?

If you have any ideas about this, Could you please help me?

Thanks a lot,

Nam

Hi Nam

This happens because Bionic doesn’t contain __swsetup (and bunch on another functions) anymore, so libcrystax fails since it rely on them. Previous Android versions (up to latest 4.4) contain this function and several another so libcrystax works fine there. Here I have created new ticket to conveniently track this bug. We are working hard on next release of CrystaX NDK (r10-based) and this bug will be fixed there.

Your answer is clearly. That explains why the lib fail in Android-L.
Please notify/message to me when you finish releasing new Crystax NDK (r10-based).
That will help me so much.

Thank for your feedback and your support.

Regards,
Nam