-1

I started developing my first game ever with unreal engine 4, 6 months ago. I tested my game on four devices. OnePlus 5T, Samsung S9 and two low-end huawei. For every test app didn't crash. Until now.

1.7 I released my game on google play (Cubereeno). Google report me this crash:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "bsd_signal" referenced by "/data/app/com.ParsleyDEV.Cubereeno-1/lib/arm/libUE4.so"...
FATAL EXCEPTION: main
Process: com.ParsleyDEV.Cubereeno, PID: 9840
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "bsd_signal" referenced by "/data/app/com.ParsleyDEV.Cubereeno-1/lib/arm/libUE4.so"...
  at java.lang.Runtime.loadLibrary0(Runtime.java:994)
  at java.lang.System.loadLibrary(System.java:1533)
  at com.epicgames.ue4.GameActivity.<clinit>(GameActivity.java:6056)
  at java.lang.Class.newInstance(Native Method)
  at android.app.Instrumentation.newActivity(Instrumentation.java:1083)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2682)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864)
  at android.app.ActivityThread.-wrap12(ActivityThread.java)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1567)
  at android.os.Handler.dispatchMessage(Handler.java:105)
  at android.os.Looper.loop(Looper.java:156)
  at android.app.ActivityThread.main(ActivityThread.java:6524)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)

I tried the highest ndk (r18b) and sdk(SDK - 25.2, Platform tools - 26, Build tools - 26) that handle unreal engine 4.22. Also i tried NDK r15 to r18..

  • Not an answer to your question, but where did you get that r18b was the latest NDK? The latest is r20. It's unlikely to be a fix to your problem, but if there are out of date docs that claim r18 is the latest I need to get them fixed. – Dan Albert Jul 09 '19 at 19:58
  • I tried the highest ndk that handle unreal engine 4.22. Therefore, r15 to r18 :) – Tomáš Petržela Jul 10 '19 at 06:25

1 Answers1

0

What device is this running on? Do you have access to it? It appears that the device is broken, because that symbol has always been available to 32-bit Android apps.

If you do have access to the device, you should try:

$ adb pull /system/lib/libc.so
$ readelf -sW libc.so | grep bsd_signal

If you're on Windows, I think the following works for the second step:

readelf -sW libc.so | findstr "bsd_signal"

(if you don't have readelf installed, the NDK includes it: <NDK>/toolchains/arm-linux-androideabi-4.9/prebuilt/<host>/bin/arm-linux-androideabi-readelf)

If bsd_signal is not defined in the library you pull off the device, the device is broken. Unfortunately any workarounds would need to be applied to libUE4.so, which I'm assuming you can't rebuild yourself.

Dan Albert
  • 10,079
  • 2
  • 36
  • 79
  • Google console report this devices: Pixel - Android 7.1, Mate 9 - 7.0, Moto Z - 7.0, Nexus 5X - 6.0. No report on device with android 8.0 or higher. Ithink i cant rebuild libEU4.so – Tomáš Petržela Jul 10 '19 at 06:37
  • Not OP, but similar app crash. The stack is the same, save for the package name. libUE4.so references "bsd_signal", but dlopen fails; cannot locate the symbol. I pulled libc.so and read it. It contains bsd_signal. I am developing on the Oculus Quest – Aaron Hull Nov 19 '19 at 22:24
  • If the device's libc.so (make sure you got the one your app is using re lib vs lib64) has bsd_signal and it's not being found then that sounds like a bug in th elinker on that device. https://github.com/KeepSafe/ReLinker is quite good for solving many of those sorts of issues, so that's worth a try. – Dan Albert Nov 20 '19 at 21:53