我是从源代码编译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'
所以我很谨慎做错事,有人能指出我正确的方向吗? 感谢。
答案 0 :(得分:0)
首先,您需要了解外部库版本控制。我发现this document很有帮助。
其次,您需要意识到可能有libintl.so
未命名为libintl.so.8
的原因 - 它们可能与ABI不兼容。从libintl.so
重命名(或创建符号链接)将导致找到它,但可能会导致运行时崩溃。
最后,您依赖libintl.so.8
的原因很可能是在链接时您使用了错误的libintl.so.8
(libintl.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服务器,那么这是一个以
开头的服务器