直到教程-3,它是没有任何问题的。问题来自4,我认为这可能是由于gnutls和openssl的更改而导致的错误。如果我将G_IO_MODULES在Android.mk中更改为gnutls,它就会生成,但在运行时会出现以下错误。防御工事:%n不允许在Android上使用
"FORTIFY:%n不允许在Android"上使用
因此,如果我修改原始的G_IO_MODULES := openssl,它将无法在以下错误的情况下执行。实际上,该路径中没有文件,只有libgiognutls.a。我怎样才能正常地做呢?我检查了名为cebero的部分中的错误,但我不知道如何修复它或如何在Android中修复它。
**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发布于 2020-08-25 01:33:56
我的猜测是,您正在混合不同版本的gst-示例/gst-docs存储库和下载的GStreamer二进制文件。如果您下载了最新的稳定的GStreamer二进制文件(在撰写本文时为1.16.2),您应该从gst的1.16分支构建示例和gst来匹配。
GStreamer主版已经转移到openssl,而不是gnutls来满足它的所有ssl需求,gst示例和gst教程已经更新,并且将与GStreamer的1.16版本不兼容。
对于"FORTIFY:%n在Android上不允许“的问题,请查看这个上游问题:https://gitlab.freedesktop.org/gstreamer/cerbero/-/issues/146确保您正在使用至少1.16.1进行构建,并且您已经完成了从零开始构建应用程序,删除所有*.o和*.so文件。
https://stackoverflow.com/questions/63351524
复制相似问题