在Android / Linux上加载动态.so vs so.NUMBER库

时间:2014-12-17 12:26:50

标签: android linux gcc shared-libraries

我是从源代码编译gstreamer 1.4.4,使用configure --host = arm-linux-androideabi flag来获取ARM .so和.a二进制文件。 然后我使用gst-android 0.10构建工具将库链接到gstreamer_android.so。 这很好。 问题是我不知道如何在Android上部署gst-rtsp-server.so。所有库都嵌入到.so文件中,但这个库不依赖于gstreamer_andorid.so但是:

0x00000001 (NEEDED)                     Shared library: [libgstreamer-1.0.so.0]
0x00000001 (NEEDED)                     Shared library: [libgio-2.0.so.0]
0x00000001 (NEEDED)                     Shared library: [libgobject-2.0.so.0]
0x00000001 (NEEDED)                     Shared library: [libglib-2.0.so.0]
0x00000001 (NEEDED)                     Shared library: [libintl.so.8]
0x00000001 (NEEDED)                     Shared library: [libm.so]
0x00000001 (NEEDED)                     Shared library: [libc.so]
0x00000001 (NEEDED)                     Shared library: [libdl.so]
0x0000000e (SONAME)                     Library soname: [libgstrtsp-1.0.so.0]

(即使我创建自定义Android.mk并将LOCAL_SHARED_LIBRARIES指向gstreamer_android.so)

所以我不知道如何从gstreamer_android.so“注册”那些libgstreamer-1.0.so.0或将gstrtspserver.so附加到gstreamer_android.so中。我之后尝试添加到gst-android的Android.mk中,但后来我收到了这个错误:

gst-build-armeabi/gstreamer_android.o:gstreamer_android.c:function gst_android_register_static_plugins: error: undefined reference to 'gst_plugin_rtspserver_register'

所以我很谨慎做错事,有人能指出我正确的方向吗? 感谢。

2 个答案:

答案 0 :(得分:0)

首先,您需要了解外部库版本控制。我发现this document很有帮助。

其次,您需要意识到可能有libintl.so未命名为libintl.so.8的原因 - 它们可能与ABI不兼容。从libintl.so重命名(或创建符号链接)将导致找到它,但可能会导致运行时崩溃。

最后,您依赖libintl.so.8的原因很可能是在链接时您使用了错误的libintl.so.8libintl.so SONAME而不是libintl.so.8的{​​{1}} 1}})。你是否自己从gnulib构建了这个libintl.so?在android树中可能有不同的版本。

答案 1 :(得分:0)

好的找到了解决方案, 它应该添加这样的东西到gst-android / ndk-build / gstreamer-1.0.mk

GSTREAMER_RTSP_SERVER_LIBS := -Wl,--whole-archive /path/to/gst-rtsp-server-1.4.4/gst/rtsp-server/.libs/libgstrtspserver-1.0.a

然后将此标志附加到GSTREAMER_ANDROID_LIBS,如下所示:

GSTREAMER_ANDROID_LIBS := $(GSTREAMER_RTSP_SERVER_LIBS) $(call fix-deps,-lgiognutls, -lhogweed)

如果你需要一个自定义的Android.mk来构建RTSP服务器,那么这是一个以

开头的服务器

Android.mk