facebook / SoLoader

Native code loader for Android
Apache License 2.0
1.31k stars 175 forks source link

UnsatisfiedLinkError: couldn't find DSO to load: libgifimage.so caused by: dlopen failed #108

Open waseefakhtar opened 1 year ago

waseefakhtar commented 1 year ago

Hi,

We use Fresco in our app and notice a lot of crashes in our production app related to SoLoader, mostly on Samsung devices running Android 12.

Here's the crash report:

Fatal Exception: java.lang.UnsatisfiedLinkError: couldn't find DSO to load: libgifimage.so caused by: dlopen failed: cannot find "" from verneed[0] in DT_NEEDED list for "/data/user/0/com.app.androif/lib-main/libgifimage.so" result: 0
       at com.facebook.soloader.SoLoader.doLoadLibraryBySoName(SoLoader.java:896)
       at com.facebook.soloader.SoLoader.loadLibraryBySoNameImpl(SoLoader.java:725)
       at com.facebook.soloader.SoLoader.loadLibraryBySoName(SoLoader.java:649)
       at com.facebook.soloader.SoLoader.loadLibrary(SoLoader.java:629)
       at com.facebook.soloader.NativeLoaderToSoLoaderDelegate.loadLibrary(NativeLoaderToSoLoaderDelegate.java:29)
       at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:51)
       at com.facebook.soloader.nativeloader.NativeLoader.loadLibrary(NativeLoader.java:30)
       at com.facebook.animated.gif.GifImage.ensure(GifImage.java:44)
       at com.facebook.animated.gif.GifImage.createFromByteBuffer(GifImage.java:81)
       at com.facebook.animated.gif.GifImage.decodeFromByteBuffer(GifImage.java:117)
       at com.facebook.imagepipeline.animated.factory.AnimatedImageFactoryImpl.decodeGif(AnimatedImageFactoryImpl.java:85)
       at com.facebook.fresco.animation.factory.AnimatedFactoryV2Impl$1.decode(AnimatedFactoryV2Impl.java:90)
       at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decodeGif(DefaultImageDecoder.java:139)
       at com.facebook.imagepipeline.decoder.DefaultImageDecoder$1.decode(DefaultImageDecoder.java:60)
       at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decode(DefaultImageDecoder.java:120)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.internalDecode(DecodeProducer.java:386)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:328)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$400(DecodeProducer.java:145)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:198)
       at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:224)
       at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:24)
       at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:90)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
       at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:52)
       at java.lang.Thread.run(Thread.java:1012)

In case it helps, here's another report that looks related to the previous but with no mention of SoLoader:

Fatal Exception: java.lang.UnsatisfiedLinkError: No implementation found for com.facebook.animated.gif.GifImage com.facebook.animated.gif.GifImage.nativeCreateFromDirectByteBuffer(java.nio.ByteBuffer, int, boolean) (tried Java_com_facebook_animated_gif_GifImage_nativeCreateFromDirectByteBuffer and Java_com_facebook_animated_gif_GifImage_nativeCreateFromDirectByteBuffer__Ljava_nio_ByteBuffer_2IZ)
       at com.facebook.animated.gif.GifImage.nativeCreateFromDirectByteBuffer(GifImage.java)
       at com.facebook.animated.gif.GifImage.createFromByteBuffer(GifImage.java:84)
       at com.facebook.animated.gif.GifImage.decodeFromByteBuffer(GifImage.java:117)
       at com.facebook.imagepipeline.animated.factory.AnimatedImageFactoryImpl.decodeGif(AnimatedImageFactoryImpl.java:85)
       at com.facebook.fresco.animation.factory.AnimatedFactoryV2Impl$1.decode(AnimatedFactoryV2Impl.java:90)
       at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decodeGif(DefaultImageDecoder.java:139)
       at com.facebook.imagepipeline.decoder.DefaultImageDecoder$1.decode(DefaultImageDecoder.java:60)
       at com.facebook.imagepipeline.decoder.DefaultImageDecoder.decode(DefaultImageDecoder.java:120)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.internalDecode(DecodeProducer.java:386)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode(DecodeProducer.java:328)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$400(DecodeProducer.java:145)
       at com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run(DecodeProducer.java:198)
       at com.facebook.imagepipeline.producers.JobScheduler.doJob(JobScheduler.java:224)
       at com.facebook.imagepipeline.producers.JobScheduler.access$000(JobScheduler.java:24)
       at com.facebook.imagepipeline.producers.JobScheduler$1.run(JobScheduler.java:90)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1137)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:637)
       at com.facebook.imagepipeline.core.PriorityThreadFactory$1.run(PriorityThreadFactory.java:52)
       at java.lang.Thread.run(Thread.java:1012)

Here are the version of the libs that we use:

com.facebook.fresco:fresco = 2.4.0 com.facebook.fresco:animated-gif = 2.4.0 com.facebook.fresco:imagepipeline-okhttp3 = 2.4.0 jp.wasabeef:fresco-processors = 2.1.0 com.facebook.fresco:webpsupport = 2.4.0

We've also recently force updated SoLoader that's used by Fresco in order to avoid the common crash in Android 12:

configurations.all {
        resolutionStrategy {
            force "com.facebook.soloader:soloader:0.10.4"
        }
    }

None of it seemed to have help though. Any idea what the cause might be?

dheeyi commented 1 year ago

@waseefakhtar could you solve this issue?