我交叉編譯FFmpeg的使用的scripts從衛項目但是我的代碼崩潰OpenSSL的支持,每當我執行以下命令:在Android上使用OpenSSL與FFmpeg的使用NDK
System.loadLibrary("crypto"); // loads OK
System.loadLibrary("ssl"); // loads OK
System.loadLibrary("avformat"); // crashes
錯誤:
dlopen("/data/data/wseemann.media.demo/lib/libavformat.so") failed: dlopen failed: cannot locate symbol "SSL_library_init" referenced by "libavformat.so"...
我使用工具鏈構建libavformat,然後使用以下Android.mk文件運行ndk-build以創建.so文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libswscale
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavcodec
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavformat
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := libavutil
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/lib/$(LOCAL_MODULE).so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/$(TARGET_ARCH_ABI)/include
include $(PREBUILT_SHARED_LIBRARY)
LOCAL_PATH:= $(call my-dir)
似乎libavformat在加載時需要libcrypto和libssl,但它找不到它們或者不加載它們。有誰知道如何解決這個問題?
Alex,感謝您的反饋。但是,我不認爲這個問題是與System.loadLibrary(「ssl」)的調用,因爲我看到該庫被加載到日誌輸出中,通常這個命令會失敗找不到指定的庫。關於如何重新編譯libavformat以明確查找libavssl.co的任何想法? –
你的意思是logcat顯示/data/data/your.package.name/lib/libssl.so已加載? –
是的Alex,這是正確的。 –