私はffmpegに取り組んでおり、ffmpegのJniラッパーを書きたいので、ffmpeg avcodecクラスのdecode_videoメソッドを呼び出すことができます。
Swap:SwapFfmpeg swap$ ndk-build
Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8 in ./AndroidManifest.xml
Compile thumb : com_example_swapffmpeg_Jffmpeg <= com_example_swapffmpeg_Jffmpeg.c
SharedLibrary : libcom_example_swapffmpeg_Jffmpeg.so
/Users/swap/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin- x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/com_example_swapffmpeg_Jffmpeg/com_example_swapffmpeg_Jffmpeg.o: in function Java_com_example_swapffmpeg_Jffmpeg_videoinfo:jni/com_example_swapffmpeg_Jffmpeg.c:14: error: undefined reference to 'avcodec_register_all'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libcom_example_swapffmpeg_Jffmpeg.so] Error 1
android.mk ファイルを作成し、その中に C ラッパー クラスと libffmpeg.so ファイルにリンクします。しかし、ビルドしようとするとエラーが表示されますavcodec_register_all
私はグーグルで検索し、2つの解決策を見つけました
1) 1つはextern C {}ですが、C++ではなく.Cファイルを使用しているため、extern {}を使用する必要があるとは思いません
2)2番目は追加することです
LOCAL_LDLIBS := -L/Users/swap/android-ndk-r9/platforms/arch-arm/usr/lib -L$(LOCAL_PATH) -lavformat -lavcodec -lavdevice -lavfilter -lavutil -lswscale -lz -ldl -lgcc
これをandroid.mkに追加しましたが、このエラーが発生しました.Local_LDLIBSの情報を何を書くべきか、なぜそれを書くべきか教えてください。
/Users/swap/android-ndk-r9/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/com_example_swapffmpeg_Jffmpeg/com_example_swapffmpeg_Jffmpeg.o: in function Java_com_example_swapffmpeg_Jffmpeg_videoinfo:jni/com_example_swapffmpeg_Jffmpeg.c:14: error: undefined reference to 'avcodec_register_all'collect2: ld returned 1 exit status
このエラーで、なぜ常にツールチェーンに行くのですか? しかし、android.mk では platform/arch-arm/ のハードコア パスを提供しました。
ここに私のandroid.mkがあります
LOCAL_PATH:=$(call my-dir)
#declare the prebuilt library
include $(CLEAR_VARS)
LOCAL_MODULE := ffmpeg-prebuilt
LOCAL_SRC_FILES := ffmpeg/$(TARGET_ARCH_ABI)/libffmpeg.so
LOCAL_EXPORT_C_INCLUDES := ffmpeg/$(TARGET_ARCH_ABI)/include
LOCAL_LDLIBS := -L/Users/swap/android-ndk-r9/platforms/arch-arm/usr/lib - L$(LOCAL_PATH) -lavformat -lavcodec -lavdevice -lavfilter -lavutil -lswscale -lz -ldl -lgcc
LOCAL_PRELINK_MODULE := true
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE:=com_example_swapffmpeg_Jffmpeg
LOCAL_SRC_FILES:=com_example_swapffmpeg_Jffmpeg.c
LOCAL_SHARED_LIBRARY := ffmpeg-prebuilt
include $(BUILD_SHARED_LIBRARY)