Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found #3

Open
sampleref opened this issue Dec 21, 2019 · 12 comments

Comments

@sampleref
Copy link

I have built this app on android studio on windows 10 PC. Build is successful but when I install and open the app on Mobile with Android 9 arm64-v8a the app throws error as below,

java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found
at java.lang.Runtime.loadLibrary0(Runtime.java:1016)
at java.lang.System.loadLibrary(System.java:1669)
at org.freedesktop.gstreamer.rtsp_example.RTSPExample.(RTSPExample.java:122)
at java.lang.Class.newInstance(Native Method)
at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:69)
at android.support.v4.app.CoreComponentFactory.instantiateActivity(CoreComponentFactory.java:43)
at android.app.Instrumentation.newActivity(Instrumentation.java:1216)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:201)
at android.app.ActivityThread.main(ActivityThread.java:6823)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)

I have seen at docs https://developer.android.com/ndk/guides/cpp-support to provide libstdc++_shared.so to be provided explicitly,
but I could not find any simple example of doing it

I tried adding in Application.mk as below to try,
APP_STL := c++_shared

and

APP_STL := c++_static

But issue still happens.

I could see there is no libstdc++_shared.so added to generated apk at path
..android_rtsp_example\app\build\outputs\apk\debug\app-debug.apk\lib\arm64-v8a\

Is this due to same reason that libstd+++shared.so is missing in apk if so how to enable Application.mk/Andoid.mk to have it added to apk?

Or Please let know if there is a different approach to address this issue?

@MathieuDuponchelle
Copy link
Collaborator

Hey @sampleref , I think you need something similar to https://gitlab.freedesktop.org/gstreamer/gst-docs/commit/5441a572d99375fb1a74d84dd3d619a8518d484f here. A subsequent PR if this works for you will be very appreciated :)

@sampleref
Copy link
Author

sampleref commented Dec 27, 2019

Thanks @MathieuDuponchelle I tried to keep the same configuration as mentioned in https://gitlab.freedesktop.org/gstreamer/gst-docs/commit/5441a572d99375fb1a74d84dd3d619a8518d484f but seems its not helping. Somehow the libc++_shared.so is not packaged into .apk file.

Going through gstreamer-android unpacked tar as to my understanding it has to be loaded from path

..\arm64\share\gst-android\ndk-build\gstreamer-1.0.mk

from variable as below,

Create the link command

GSTREAMER_ANDROID_CMD := $(call libtool-link,$(TARGET_CXX) $(GLOBAL_LDFLAGS) $(TARGET_LDFLAGS) -nostdlib++ -shared $(SYSROOT_GST_LINK_ARG)
-o $(GSTREAMER_ANDROID_SO) $(GSTREAMER_ANDROID_O)
-L$(GSTREAMER_ROOT)/lib -L$(GSTREAMER_STATIC_PLUGINS_PATH) -L$(CXX_SHARED_ROOT)
$(GSTREAMER_ANDROID_LIBS), $(GSTREAMER_LD)) -Wl,-no-undefined $(GSTREAMER_LD)

Here the variable GSTREAMER_ANDROID_CMD is resolved to empty when I logged it during the build. It looks to be loading the path for missing libc++_shared.so from path

C:\Users${USER}\AppData\Local\Android\Sdk\ndk\sources\cxx-stl\llvm-libc++\libs\arm64-v8a

But somehow this variable GSTREAMER_ANDROID_CMD := $(call libtool-link... is not resolved and stays empty on build. Is there any lib/tool additionally to be installed to resolve this call libtool-link on Windows 10 machine... ?

@MathieuDuponchelle
Copy link
Collaborator

@sampleref I don't quite know what to say here, can you build the tutorials on windows?

@ystreet
Copy link

ystreet commented Dec 27, 2019

Do you have a dummy.cpp like file in order for the ndk-build magic to include the c++ library that is mentioned?

@sampleref
Copy link
Author

sampleref commented Dec 27, 2019

Thanks @ystreet

Yes got it now. Adding dummy.cpp in jni folder actually made the build to include c++ library in apk.

I actually missed it assuming just an empty file.

_Not quite fully sure how adding this .cpp file enabled build to include libc++shared.so in apk.

Any pointers of how this is configured will be helpful for more understanding

Now I can install and open app on my android mobile. But when clicking on play button it throws message as

Error received from element source: Could not open resource for reading and writing

and no video is played. Is it that this android app needs to be allowed for network access?

@sampleref
Copy link
Author

@sampleref I don't quite know what to say here, can you build the tutorials on windows?

Yes I can build this tutorial on windows. I think as updated, missing dummy.cpp was issue. Once adding it apk is packaged with libc++shared.so

Thanks

@MathieuDuponchelle
Copy link
Collaborator

Yes I can build this tutorial on windows. I think as updated, missing dummy.cpp was issue. Once adding it apk is packaged with libc++shared.so

OK, can you propose a PR?

@MathieuDuponchelle
Copy link
Collaborator

and no video is played. Is it that this android app needs to be allowed for network access?

afaict this is simply caused by the hardcoded RTSP stream being currently unavailable (rtsp://184.72.239.149/vod/mp4:BigBuckBunny_115k.mov), you can simply update https://github.com/centricular/android_rtsp_example/blob/master/app/jni/rtsp-example.c#L159 to your liking, or even better make it configurable from the interface (PR welcome as well :) )

@sampleref
Copy link
Author

Ok I shall try with working rtsp url. Created a PR with changes as working for me at #4

@MathieuDuponchelle
Copy link
Collaborator

Ok I shall try with working rtsp url. Created a PR with changes as working for me at #4

Thanks for following up :)

@kevinrev26
Copy link

Hello. I'm trying to test this project but i encounter the same error. Where should i put that dummy.cpp? @sampleref is this correct? android_rtsp_example/app/jni

@satheesh-ga
Copy link

For me, I have resolved this by adding this line in Application.mk
APP_STL = c++_shared

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants