FFMpeg на Android, неопределенные ссылки на Функции libavcodec, хотя они перечислены в командной строке

У меня проблема с неразрешенными ссылками на функции libavcodec ffmpeg, пока не удалось найти ответ в других местах (включая мой разум) :)

Позвольте мне описать мою настройку - это занимает место , но это действительно базовый вариант, возможно, я не вижу какой-то ошибки ...

Я создал FFMPeg с помощью инструментария ndk r5, порта ffmpeg, который я получил от http://bambuser.com/opensource (как рекомендовано в других вопросах здесь). Он собран отлично, поэтому я поместил в свой проект несколько статических библиотек следующим образом:

/jni/bambuser_ffmpeg/libavcodec.a
/jni/bambuser_ffmpeg/libavformat.a
/jni/bambuser_ffmpeg/libavcore.a
/jni/bambuser_ffmpeg/libavutil.a

Затем я создал Android.mk в папке bambuser_ffmpeg, чтобы перечислить эти библиотеки как предварительно созданные:

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)

Затем у меня есть еще один модуль, который ссылается на эти библиотеки в своем Android.mk, настраивают пути включения и т. д .:

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)

И, наконец, у меня есть мой ffmpeg_test.cpp, который действительно является базовым, например:

#include 

extern "C" {
#include 
#include 
}

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;
}

Когда я запускаю ndk-build , он компилируется нормально, но при компоновке выводит неразрешенную ссылку почти на все функции в libavcodec . Похоже, не удается найти только функции этой библиотеки:

/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(allformats.o): In function `av_register_all':
/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/allformats.c:47: undefined reference to `avcodec_register_all'
/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): In function `parse_frame_rate':
/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:3240: undefined reference to `av_parse_video_rate'
/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): In function `parse_image_size':
/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:3234: undefined reference to `av_parse_video_size'
/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): In function `flush_packet_queue':
/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:1277: undefined reference to `av_free_packet'
/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:1283: undefined reference to `av_free_packet'
/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): In function `get_audio_frame_size':
/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:766: undefined reference to `av_get_bits_per_sample'
/home/dimka/src/mobile/android/ffmpegtest/obj/local/armeabi/libavformat.a(utils.o): In function `ff_interleave_add_packet':
/home/dimka/work/suzy/tmp/ffmpeg-android/ffmpeg/libavformat/utils.c:2909: undefined reference to `av_dup_packet'
and so on...

Я не могу понять, почему это происходит. Я попробовал запустить ndk-build V = 1 , чтобы проверить действительную команду связывания, и libavcodec сидит там совершенно правильно, как и должно. Все остальные библиотеки ffmpeg тоже есть.

Есть подсказки?

10
задан Tsyvarev 24 March 2019 в 15:00
поделиться