FFMpeg en Android, referencias indefinidas a las funciones de libavcodec, aunque aparece en la línea de comandos

Tengo un problema con las referencias no resueltas a las funciones libavcodec de ffmpeg, hasta ahora no he podido encontrar la respuesta en otros lugares (incluida mi mente):)

Permítame describir mi configuración: ocupa espacio, pero es realmente básico, podría ser que no veo ningún error ...

Construí un FFMPeg con ndk r5 toolchain, puerto ffmpeg que obtuve dehttp: //bambuser.com/opensourc (como se recomienda en otras preguntas aquí). Funcionó bien, así que puse varias bibliotecas estáticas en mi proyecto como esta:

<project>/jni/bambuser_ffmpeg/libavcodec.a
<project>/jni/bambuser_ffmpeg/libavformat.a
<project>/jni/bambuser_ffmpeg/libavcore.a
<project>/jni/bambuser_ffmpeg/libavutil.a

A continuación, creé un Android.mk en la carpeta bambuser_ffmpeg para enumerar estas bibliotecas como precompiladas:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)
LOCAL_MODULE := bambuser-libavcore
LOCAL_SRC_FILES := libavcore.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)
LOCAL_MODULE := bambuser-libavformat
LOCAL_SRC_FILES := libavformat.a
include $(PREBUILT_STATIC_LIBRARY)

(same for other two libs)

A continuación, tengo otro módulo que hace referencia a estas bibliotecas en su Android.mk, configura rutas de inclusión, etc.:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := ffmpegtest
LOCAL_STATIC_LIBRARIES := bambuser-libavcodec bambuser-libavcore bambuser-libavformat bambuser-libavutil
LOCAL_SRC_FILES := ffmpeg_test.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../bambuser_ffmpeg/include
LOCAL_LDLIBS    := -llog -lz

include $(BUILD_SHARED_LIBRARY)

Y finalmente tengo mi ffmpeg_test.cpp que es realmente básico, como este:

#include <jni.h>

extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
}

extern "C" {
    JNIEXPORT jint JNICALL Java_com_the7art_ffmpegtest_PaintThread_testFFMpeg(JNIEnv* env, jobject obj, jstring fileName);
}

JNIEXPORT jint JNICALL Java_com_the7art_ffmpegtest_PaintThread_testFFMpeg(JNIEnv* env, jobject obj, jstring fileName)
{
    av_register_all();
    return 0;
}

Cuando corro ndk-build, se compila bien, pero al vincularlo imprime una referencia sin resolver a casi todas las funciones en libavcodec. Parece que solo las funciones de esta lib no se encuentran:

/ home / dimka / src / mobile / android / ffmpegtest / obj / local / armeabi / libavformat.a (allformats.o): en funciónav_register_all': /home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/allformats.c:47: undefined reference toavcodec_register_all '/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): En funciónparse_frame_rate': /home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:3240: undefined reference toav_parse_video_rate '/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): En funciónparse_image_size': /home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:3234: undefined reference toav_parse_video_size '/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): En funciónflush_packet_queue': /home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:1277: undefined reference toav_free_packet '/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:1283: referencia indefinida aav_free_packet' /home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): In functionget_audio_frame_size ': /home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:766: referencia indefinida aav_get_bits_per_sample' /home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): In functionff_interleave_add_packet ': /home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:2909: referencia indefinida a `av_dup_packet'

y así..

No entiendo por qué sucede esto. Traté de ejecutar ndk-build V = 1 para verificar el comando de enlace real y libavcodec está sentado allí perfectamente bien, como debería ser. Todas las otras bibliotecas ffmpeg también están allí.

¿Alguna pista?

Respuestas a la pregunta(3)

Su respuesta a la pregunta