#gstreamer #ndk-build
Вопрос:
Разработка на Linux Mint 20.2 с подключенным USB Samsung GT-P3113. Android-студия(Artic Fox 2020.3.1) установлена, но вы хотите запустить Ndk-сборку (/home/george/Android/Sdk/ndk/23.0.7599858/ndk-сборка) из командной строки терминала GNOME. Я могу успешно (создавать/устанавливать/запускать) учебные пособия _1, _2 и _3, если я изменю $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk:
from:
GSTREAMER_LD := -fuse-ld=gold$(EXE_SUFFIX) -Wl,-soname,lib$(GSTREAMER_ANDROID_MODULE_NAME).so
to:
GSTREAMER_LD := -fuse-ld=$(EXE_SUFFIX) -Wl,-soname,lib$(GSTREAMER_ANDROID_MODULE_NAME).so
Однако tutorial_4 и tutorial_5 создают ошибку ld:
GStreamer : [GEN] => gst-build-armeabi-v7a/gstreamer_android.c
GStreamer : [COMPILE] => gst-build-armeabi-v7a/gstreamer_android.c
GStreamer : [LINK] => gst-build-armeabi-v7a/libgstreamer_android.so
ld: error: unable to find library -lgcc
clang : error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [/home/george/Android/gstreamer-1.0-android-universal-1.18.5/armv7/share/gst-android/ndk-build//gstreamer-1.0.mk:234: buildsharedlibrary_armeabi-v7a] Error 1
Я пробовал версии gstreamer-1.0-android-universal-1.16.3, 1.18.4 и 1.18.5 с тем же результатом. Ошибка возникает при использовании плагина $(GSTREAMER_PLUGINS_NET). Чтобы сузить проблему, я заменил GSTREAMER_PLUGINS_NET на GSTREAMER_PLUGINS_NET_RESTRICTED.
GStreamer : [GEN] => gst-build-armeabi-v7a/gstreamer_android.c
GStreamer : [COMPILE] => gst-build-armeabi-v7a/gstreamer_android.c
GStreamer : [LINK] => gst-build-armeabi-v7a/libgstreamer_android.so
ld: warning: /home/jan/devel/gstreamer/cerbero/build/sources/android_universal/armv7/wavpack-5.1.0/src/unpack.c:132:(.text.unpack_samples 0xAF0): branch and link relocation: R_ARM_THM_CALL to non STT_FUNC symbol: unpack_decorr_mono_pass_cont_armv7 interworking not performed; consider using directive '.type unpack_decorr_mono_pass_cont_armv7, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required
ld: warning: /home/jan/devel/gstreamer/cerbero/build/sources/android_universal/armv7/wavpack-5.1.0/src/unpack.c:189:(.text.unpack_samples 0xBDA): branch and link relocation: R_ARM_THM_CALL to non STT_FUNC symbol: unpack_decorr_stereo_pass_cont_armv7 interworking not performed; consider using directive '.type unpack_decorr_stereo_pass_cont_armv7, %function' to give symbol type STT_FUNC if interworking between ARM and Thumb is required
Done mkdir
Done cp
[armeabi-v7a] Prebuilt : libgstreamer_android.so <= gst-build-armeabi-v7a/
Done rm
[armeabi-v7a] Install : libgstreamer_android.so => libs/armeabi-v7a/libgstreamer_android.so
[armeabi-v7a] Compile thumb : tutorial-4 <= tutorial-4.c
[armeabi-v7a] Compile thumb: tutorial-4 <= dummy.cpp
[armeabi-v7a] Prebuilt : libc _shared.so <= <NDK>/sources/cxx-stl/llvm-libc /libs/armeabi-v7a/
[armeabi-v7a] SharedLibrary : libtutorial-4.so
[armeabi-v7a] Install : libtutorial-4.so => libs/armeabi-v7a/libtutorial-4.so
[armeabi-v7a] Install : libc _shared.so => libs/armeabi-v7a/libc _shared.so
Это было успешно (компиляция,ссылка,установка), но вызвало ожидаемую ошибку во время выполнения:
Ошибка, полученная от элемента urldecodebin0:для «https» не реализован обработчик URI
Где находится библиотека «gcc» в загруженном gstreamer-1.0-android-universal-1.18.X? Нужно ли его компилировать? Как мне действовать дальше?
Application.mk
APP_ABI = armeabi-v7a
APP_STL = c _shared
APP_PLATFORM = android-23
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tutorial-4
LOCAL_SRC_FILES := tutorial-4.c dummy.cpp
LOCAL_SHARED_LIBRARIES := gstreamer_android
LOCAL_LDLIBS := -llog -landroid
include $(BUILD_SHARED_LIBRARY)
# GSTREAMER_ROOT_ANDROID:=/home/george/Android/gstreamer-1.0-android-universal-1.16.3
# GSTREAMER_ROOT_ANDROID:=/home/george/Android/gstreamer-1.0-android-universal-1.18.4
GSTREAMER_ROOT_ANDROID:=/home/george/Android/gstreamer-1.0-android-universal-1.18.5
ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif
GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/armv7
GSTREAMER_NDK_BUILD_PATH := $(GSTREAMER_ROOT)/share/gst-android/ndk-build/
include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk
GSTREAMER_PLUGINS := $(GSTREAMER_PLUGINS_CORE) $(GSTREAMER_PLUGINS_PLAYBACK) $(GSTREAMER_PLUGINS_CODECS) $(GSTREAMER_PLUGINS_SYS)
GSTREAMER_PLUGINS = $(GSTREAMER_PLUGINS_NET)
G_IO_MODULES := openssl
GSTREAMER_EXTRA_DEPS := gstreamer-video-1.0
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
Комментарии:
1.
libgcc
является частью компилятора GCC. Поскольку вы используетеclang
для компиляции, этого, скорее всего, не существует. Вероятно, простое удаление его из пакета, который его извлекает, может заставить его работать.