如何在Android应用中构建FFmpeg?

4

在以下步骤成功构建ffmpeg后:

  https://dev59.com/5X3aa4cB1Zd3GeqPg7ey

  Now I have copy include and all .a file into my JNI folder. and my Android.mk 
  file is as:-



      LOCAL_PATH := $(call my-dir)

        include $(CLEAR_VARS)

        LOCAL_MODULE    := ffmpegutils
       LOCAL_SRC_FILES := tutorial02.c

      LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
      LOCAL_LDLIBS := -L$(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-arm/usr/lib -L$(LOCAL_PATH) -lavformat -lavcodec  -lavfilter -lavutil -lswscale -llog -ljnigraphics -lz -ldl -lgcc

include $(BUILD_SHARED_LIBRARY)

但是我的项目出现了错误:-
     Description    Resource    Path    Location    Type
make: *** [obj/local/armeabi/libffmpegutils.so] Error 1 MainActivity            C/C++ Problem
undefined reference to 'ANativeWindow_unlockAndPost'    MainActivity        line 231, external location: /home/kiwitech/Documents/development/tools/ndk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/ffmpegutils/tutorial02.o: in function decodeAndRender:jni/tutorial02.c   C/C++ Problem
undefined reference to 'ANativeWindow_lock' MainActivity        line 222, external location: /home/kiwitech/Documents/development/tools/ndk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/ffmpegutils/tutorial02.o: in function decodeAndRender:jni/tutorial02.c   C/C++ Problem
undefined reference to 'ANativeWindow_release'  MainActivity        line 150, external location: /home/kiwitech/Documents/development/tools/ndk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/ffmpegutils/tutorial02.o: in function naSetSurface:jni/tutorial02.c  C/C++ Problem
undefined reference to 'ANativeWindow_setBuffersGeometry'   MainActivity        line 147, external location: /home/kiwitech/Documents/development/tools/ndk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/ffmpegutils/tutorial02.o: in function naSetSurface:jni/tutorial02.c  C/C++ Problem
undefined reference to 'ANativeWindow_fromSurface'  MainActivity        line 145, external location: /home/kiwitech/Documents/development/tools/ndk/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/ffmpegutils/tutorial02.o: in function naSetSurface:jni/tutorial02.c  C/C++ Problem

please anyone help me.

1个回答

6

您还需要链接Android库,因此请在LOCAL_LDLIBS中添加-landroid。

$NDK/docs下的STABLE-APIS.html文档解释如下:

所有相应的函数都由API 9级别附带的“libandroid.so”库版本提供。要使用它,请使用以下内容: LOCAL_LDLIBS += -landroid


请问您能修改我的.mk文件的哪个Android库? - Sandeep Tiwari
嗨,请描述原因,因为它能够工作。非常感谢。 - Sandeep Tiwari
@SandeepTiwari,你遇到了链接器错误,指示它找不到这些符号,因此你需要找出哪个NDK库提供了这些函数。一个好的起点总是$NDK/docs目录中的STABLE-APIS.HTML文档。阅读“Android本地应用程序API”部分,你将找到答案。 - Matthieu Poullet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接