由于有关G_IO_MODULES:= openssl的错误,Gstreamer tutorial-4无法在Android上运行

问题描述

直到第3篇教程完成时,没有任何问题。问题出在4,我认为可能是由于gnutls和openssl的更改导致的错误。如果我将Android.mk中的G_IO_MODULES更改为gnutls,则会生成它,但是一旦运行就会结束,并出现以下错误。 “ FORTIFY:Android上不允许%n”

enter image description here

“ FORTIFY:Android上不允许%n”

因此,如果我修改原始的G_IO_MODULES:= openssl,则无法执行它,并出现以下错误。实际上,该路径中没有文件,只有libgiognutls.a。我通常如何做?我检查了cebero部分中的错误,但我不知道如何修复它或如何在Android中修复它。

enter image description here

**Build command failed.
Error while executing process E:\Android-r17\android-ndk-r17c-windows-x86_64\android-ndk-r17c\ndk-build.cmd with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=C:\Users\~~\Desktop\20_07_05_touch_ppt\MyApplication\app\src\main\jni\Android.mk NDK_APPLICATION_MK=C:\Users\~~\Desktop\20_07_05_touch_ppt\MyApplication\app\src\main\jni\Application.mk APP_ABI=arm64-v8a NDK_ALL_ABIS=arm64-v8a NDK_DEBUG=1 APP_PLATFORM=android-21 NDK_OUT=C:/Users/~~/Desktop/20_07_05_touch_ppt/MyApplication/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=C:\Users\~~\Desktop\20_07_05_touch_ppt\MyApplication\app\build\intermediates\ndkBuild\debug\lib NDK_APPLICATION_MK=src/main/jni/Application.mk GSTREAMER_JAVA_SRC_DIR=src GSTREAMER_ROOT_ANDROID=E:\Android-17.0\gstreamer-1.0-android-universal-1.16.0.tar\gstreamer-1.0-android-universal-1.16.0 GSTREAMER_ASSETS_DIR=src/assets C:/Users/~~/Desktop/20_07_05_touch_ppt/MyApplication/app/build/intermediates/ndkBuild/debug/obj/local/arm64-v8a/libtutorial-4.so}
[arm64-v8a] Compile        : tutorial-4 <= tutorial-4.c
GStreamer      : [GEN] => gst-build-arm64-v8a/gstreamer_android.c
GStreamer      : [COMPILE] => gst-build-arm64-v8a/gstreamer_android.c
GStreamer      : [LINK] => gst-build-arm64-v8a/libgstreamer_android.so
clang++.exe: error: no such file or directory: 'E:/Android-17.0/gstreamer-1.0-android-universal-1.16.0.tar/gstreamer-1.0-android-universal-1.16.0/arm64/lib/gio/modules/libgioopenssl.a'
make: *** [buildsharedlibrary_arm64-v8a] Error 1**

这是Android.mk的完整代码

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := tutorial-4
LOCAL_SRC_FILES := tutorial-4.c
LOCAL_SHARED_LIBRARIES := gstreamer_android
LOCAL_LDLIBS := -llog -landroid
include $(BUILD_SHARED_LIBRARY)

ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif

ifeq ($(TARGET_ARCH_ABI),armeabi)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/arm
else ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/armv7
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/arm64
else ifeq ($(TARGET_ARCH_ABI),x86)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/x86
else ifeq ($(TARGET_ARCH_ABI),x86_64)
GSTREAMER_ROOT        := $(GSTREAMER_ROOT_ANDROID)/x86_64
else
$(error Target arch ABI not supported: $(TARGET_ARCH_ABI))
endif

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_NET) $(GSTREAMER_PLUGINS_SYS)
G_IO_MODULES              := openssl
GSTREAMER_EXTRA_DEPS      := gstreamer-video-1.0
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk

解决方法

我的猜测是,您正在混合使用不同版本的gst-examples / gst-docs存储库和下载的GStreamer二进制文件。如果您下载最新的稳定的GStreamer二进制文件(在撰写本文时为1.16.2),则应从gst-examples和gst-docs的1.16分支中进行构建。

出于所有ssl需求,GStreamer管理员已移至openssl而不是gnutls,并且gst-examples和gst-docs教程已更新,并且与GStreamer的1.16版本不兼容。

对于“ FORTIFY:Android上不允许%n”问题,请查看以下上游问题:https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/146 确保您至少使用1.16.1进行构建,并且已从头开始构建了应用程序,并删除了所有* .o和* .so文件。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...