我正在關注以下instruction of vitamio to build the ffmpeg library on Android。未能使用Vitamio Android ffmpeg庫:找不到'__aeabi_llsl'
編譯工作,我得到libffmpeg.so,以及幾個靜態庫,如libavcodec.a,libavformat.a等。我複製libffmpeg.so,以及其他lib * .a(在大小寫我將在後面的文件夾中使用lib * .a)。
然後我在我的Android ffmpeg應用程序的jni部分使用它。 jni部分在C++中獨立工作。
在Android.mk中,我嘗試了不同的設置,但總是有錯誤。 的Android.mk設置爲:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include /android-opencv/OpenCV-2.4.2-android-sdk/sdk/native/jni/OpenCV.mk
LOCAL_MODULE := native_sample
LOCAL_SRC_FILES := jni_part.cpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
LOCAL_LDLIBS += -L$(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm/usr/lib -L$(LOCAL_PATH)
LOCAL_LDLIBS += -lffmpeg
LOCAL_LDLIBS += -llog -ljnigraphics -lm -lz -ldl -lgcc
的錯誤是:
04-16 19:16:46.998: E/AndroidRuntime(10375): FATAL EXCEPTION: main
04-16 19:16:46.998: E/AndroidRuntime(10375): java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1963]: 69 could not load needed library 'libffmpeg.so' for 'libnative_sample.so' (load_library[1105]: Library 'libffmpeg.so' not found)
但libffmpeg.so是文件夾中。
然後,我用另一個設置:
LOCAL_LDLIBS += -lavformat -lavcodec -lswscale -lavutil -lswresample
LOCAL_LDLIBS += -lgcc -llog -ljnigraphics -lm -lz -ldl
現在的錯誤是不同的,就是:
04-16 19:19:29.777: D/dalvikvm(10419): Trying to load lib /data/data/com.example.andrvideoprocess/lib/libnative_sample.so 0x4051cb60
04-16 19:19:29.787: E/AndroidRuntime(10419): FATAL EXCEPTION: main
04-16 19:19:29.787: E/AndroidRuntime(10419): java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1312]: 69 cannot locate '__aeabi_llsl'...
我想這些庫的幾個不同的順序,輸出相同的錯誤信息。
我去的文件夾:$(NDK_PLATFORMS_ROOT)/ $(TARGET_PLATFORM)/弓臂/ usr/lib目錄 (即/ usr/src目錄/ Android的NDK-R8B /平臺/ Android的14 /弓臂/ usr/lib目錄) 發現,沒有libgcc.a的
我去一個工具鏈文件夾(我根據halfninja的Android + ffmpeg的指令建),「Android的ffmpeg的-X264 /項目/ JNI /工具鏈/ lib目錄/gcc/arm-linux-androideabi/4.6.x-google/armv7-a」,鍵入命令:
$ nm libgcc.a > output.txt
我發現以下信息__aeabi_llsl:
_ashldi3.o:
00000000 t $a
0000000c N $d
00000000 T __aeabi_llsl
00000000 T __ashldi3
於是我包括以下Android.mk:
LOCAL_LDLIBS += -L/android-ffmpeg-x264/Project/jni/toolchain/lib/gcc/arm-linux-androideabi/4.6.x-google/armv7-a
的編譯一次。 同樣的錯誤: 無法加載庫:
reloc_library[1312]: 69 cannot locate '__aeabi_llsl'...
幫助!
問題與libgcc.a有關,它是鏈接的順序,但我不明白爲什麼添加'-lgcc'。構建系統應該已經爲你連接libgcc.a(靜態版本)。從刪除開始,做一個乾淨的構建。 – auselen
謝謝。我刪除了-lgcc,並清理了構建項目,然後運行該項目。完全一樣的錯誤。順便說一句,爲什麼我不能使用libffmpeg.so? – user1914692
檢查日誌,如果可能的話核心。這可能會提供一個線索。 – auselen