2014-04-29 2 views
1

FFMpeg를 사용하는 안드로이드 응용 프로그램을 만들려고합니다. 이를 위해 http://www.ffmpeg.org/olddownload.html에서 FFmpeg 코드 (v 0.8.15)를 다운로드했습니다. 그리고 지침에 따라 코드를 컴파일 http://www.roman10.net/how-to-build-ffmpeg-for-android/안드로이드 플랫폼 용 FFmpeg

결과적으로 .a 파일은 Android/lib 폴더 & .h 파일의 android/include 폴더에 생성되었습니다.

그러나이 기본 제공 FFmpeg 라이브러리 (.a 파일)를 사용하는 원시 코드의 .so 파일을 만들려고하면 정의되지 않은 참조 오류가 발생합니다.

내 프로젝트의 코드 구조가 아래에 나와 있습니다.

프로젝트 경로가이 경로에서 /home/guest/Neeraj_temp/FFMpeg-Example

이다, 나는 두 개의 폴더가 미리 제작 된 폴더에서 & 미리 만들어진 을 JNI 생성, 나는 libswscale.a, libavfilter.a, libavcodec.a, libavformat.a, libavutil.a을 유지 jni 폴더에서 모든 .h 폴더 (libavcodec, libavfilter, libavformat, libavutil, libswscale)를 포함하는 하나의 include 폴더를 유지했습니다.

api-example.c 파일도 FFmpeg의 API를 사용하는 jni 폴더에 보관됩니다. & 하나의 Android.mk 파일이 jni 폴더에 있습니다.

Android.mk:-

LOCAL_PATH:= $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := libFFmpeg 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/FFMpeg/include 
LOCAL_SRC_FILES := api-example.c 
LOCAL_LDLIBS += -L$(LOCAL_PATH)/../prebuilt -lavfilter -lavutil -lavformat -lavcodec -lswscale 
include $(BUILD_SHARED_LIBRARY) 

오류 : 나는 해결책을 얻을 수 없습니다 아직 블로그하지만, 많이 읽고

/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:689: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wavpack.o): In function `wv_unpack_stereo': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:604: undefined reference to `av_log' 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:608: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wavpack.o):/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wavpack.c:1215: more undefined references to `av_log' follow 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `synth_block_fcb_acb': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1359: undefined reference to `av_memcpy_backptr' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `synth_frame': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1441: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `synth_superframe': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1765: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `wmavoice_decode_packet': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:1919: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o): In function `wmavoice_decode_init': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:350: undefined reference to `av_log' 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:373: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wmavoice.o):/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wmavoice.c:397: more undefined references to `av_log' follow 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(wnv1.o): In function `decode_frame': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/wnv1.c:81: undefined reference to `av_reverse' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(ws-snd1.o): In function `ws_snd_decode_frame': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/ws-snd1.c:70: undefined reference to `av_log' 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/ws-snd1.c:83: undefined reference to `av_log' 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/ws-snd1.c:79: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xan.o): In function `xan_decode_frame': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:568: undefined reference to `av_log' 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:551: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xan.o):/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:515: more undefined references to `av_log' follow 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xan.o): In function `xan_unpack': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xan.c:178: undefined reference to `av_memcpy_backptr' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xl.o): In function `decode_frame': 
/home/guest/Neeraj_temp/ffmpeg-0.8.15/libavcodec/xl.c:60: undefined reference to `av_log' 
/home/guest/Neeraj_temp/FFMpeg-Example/jni/../prebuilt/libavcodec.a(xsubdec.o): In function `decode_frame' 

. 친절하게 솔루션을 제공하십시오. 어떻게하면이 에러가 발생하지 않아야 코드를 구조화해야합니까? & 컴파일 된 코드를 얻으십시오.

감사합니다.

답변

0

FFmpeg의 버전을 다운로드하여 Ubuntu Linux에서 만들었지 만 (안드로이드는 제외). 나는 당신에게 문제를 일으키는 기능을 조사했다.

링크 오류 중 일부만 복사 한 것처럼 보입니다. 나머지는 비슷할 것이므로 괜찮습니다. 오류 텍스트는 두 개의 기호가 누락되었음을 보여줍니다 (av_logav_reverse). 이 두 가지 모두 libavutil.a에 정의되어 있다고 가정합니다. libavutil.a에 대해 nm을 실행하고 'T av_log''R av_reverse'을 검색하십시오. 그 끈들이 나타나나요? 그렇지 않은 경우, 특정 파일이 빌드되어 libavutil.a에 아카이브되지 않습니다. 빌드 된 객체를 검색하여 log.o (av_log의 경우) 및 mathematics.o (av_reverse의 경우)가 모두 빌드되었는지 확인합니다. 존재하지 않는다면 우리는 왜 그들이 그것을 놓쳤는 지 알아낼 필요가 있습니다.

문자열이 일 경우nm 목록에있는 경우 혼란 스럽습니다. 이것은 LABAL_LDLIBS 변수에서 libavutil.a를 볼 수는 있지만 연결되어 있지 않음을 나타냅니다. 링크 순서가 올바르게 표시됩니다 (libavcodec 전에 사용).

+0

nm 명령으로 검사했는데 & av_log & av_reverse가 libavutil.a에 있습니다. 라인은 다음과 같습니다. - "00000070 T av_log"& "00000200 R av_reverse". 또한 log.o와 matematices.o도 빌드되었는지 확인했습니다. – Neeraj

관련 문제