2012-08-30 2 views
1

현재 상황은; ffmpeg와 libx264는 Android 용으로 공유 라이브러리와 정적 라이브러리로 각각 컴파일되었습니다. 나에게 libx264.a와 libffmpeg.so를 가지고 있기 때문에 남은 것은 그것들을 연결하고 내 응용 프로그램을 진행할 수있게 해주는 ffmpeg 라이브러리를 얻는 것 뿐이다. 그러나 몇 가지 질문에는 답이 없습니다. 윈도우 7에서 가상 머신으로 Ubuntu를 사용하고 있습니다. ffmpeg 0.10.4 릴리즈와 NDK 7을 사용하고 있습니다.또 다른 ffmpeg/libx264 문제

ffmpeg에 libx264를 포함시키기 위해 플래그 (extracf 및 extrald)를 조정하려고했습니다. 컴파일 과정도 있지만, 나는 계속 실패하고있다. 아래에서 ffmpeg와 내가 만난 오류에 대한 빌드 스크립트를 찾을 수 있습니다.

NDK=~/Android_NDK_r7b 
PLATFORM=$NDK/platforms/android-8/arch-arm/ 
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86 
x264=/usr/local 
#x264v2=~/x264 
function build_one 
{ 
./configure --target-os=linux \ 
    --prefix=$PREFIX \ 
    --enable-cross-compile \ 
    --extra-libs="-lgcc" \ 
    --arch=arm \ 
    --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \ 
    --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \ 
    --nm=$PREBUILT/bin/arm-linux-androideabi-nm \ 
    --sysroot=$PLATFORM \ 
    # --extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \ 
    --extra-cflags="-I$x264/include" \ 
    --enable-shared \ 
    --enable-static \ 
    #--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \ 
    --extra-ldflags="-L$x264/lib" \ 
    --disable-everything \ 
    # --enable-demuxer=mov \ 
    # --enable-demuxer=h264 \ 
    # --disable-ffplay \ 
    --enable-gpl \ 
    --enable-libx264 \ 
    # --enable-protocol=file \ 
    # --enable-avformat \ 
    # --enable-avcodec \ 
    # --enable-encoder=libx264 \ 
    # --enable-decoder=rawvideo \ 
    #--enable-decoder=mjpeg \ 
    # --enable-decoder=h263 \ 
    # --enable-decoder=mpeg4 \ 
    # --enable-encoder=h264 \ 
    # --disable-network \ 
    #--enable-zlib \ 
    # --disable-avfilter \ 
    #--disable-avdevice \ 
    $ADDITIONAL_CONFIGURE_FLAG 

make clean 
make -j4 install 
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o 
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a 
} 

#arm v7vfpv3 
CPU=armv7-a 
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU " 
PREFIX=./androidIncludeTrialsNDK7/$CPU 
ADDITIONAL_CONFIGURE_FLAG= 
build_one 

나는 기본적으로 선이 extracf 및 extrald 플래그 및 다른 사람 (주석 아웃)을 사용하여 삭제하면이 오류를 발견하지 libx264를 제외하고 잘 작동합니다. 그렇지 않으면 다음과 같은 오류가 발생합니다.

./buildnew.sh: line 35: --extra-cflags=-I/usr/local/include: No such file or directory 
./buildnew.sh: line 38: --extra-ldflags=-L/usr/local/lib: No such file or directory 
./buildnew.sh: line 40: --disable-everything: command not found 
./buildnew.sh: line 44: --enable-gpl: command not found 

컴파일 프로세스는 다음과 같이 끝납니다.

make: *** [libavdevice/v4l.o] Error 1 
make: *** Waiting for unfinished jobs.... 
/home/mehmet/Android_NDK_r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ar: creating libavcodec/libavcodec.a 
/home/mehmet/Android_NDK_r7b/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-ld: cannot open output file ./androidIncludeTrialsNDK7/armv7-a/libffmpeg.so: No such file or directory 

내가 x264 내 디렉토리/집/메 흐멧/x264에 설치되어 있고 나는 또한 whereis x264.a 확인, 그것은뿐만를/usr/local/lib로 저를 보여줍니다. 홈/mehmet/x264 폴더를 가리 키도록 $ x264 경로를 변경하려고 시도했지만 동일한 오류가 발생합니다.

마지막으로 extracf 및 extrald 플래그 (주석이 달린 플래그와 사용 된 플래그 모두)를 모두 사용할 수있는 경우. 위에서 언급 한 것과 같은 오류가 발생합니다. 나는 여기에 간단한 오타를 쓰고 있지만 두려워서 그것을 볼 수없고 그것이 나를 미치게 만든다. 도와 주셔서 정말로 고맙습니다.

최고.

내가 코멘트를 삭제 이제 다음을 얻을 수있다

편집 할 수 있습니다.

./buildnew.sh: 4: ./buildnew.sh: function: not found 
ERROR: libx264 not found 

위의 오류는 스크립트를 실행할 때 터미널에서 관찰됩니다. 그것은 어떤 점을 구축하고 다음과 같은 오류로 프로세스를 완료합니다.

libavcodec/libavcodec.a(libx264.o): In function `X264_frame': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:159: undefined reference to `x264_picture_init' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:179: undefined reference to `x264_encoder_reconfig' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:191: undefined reference to `x264_encoder_encode' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:197: undefined reference to `x264_encoder_delayed_frames' 
libavcodec/libavcodec.a(libx264.o): In function `encode_nals': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:196: undefined reference to `x264_bit_depth' 
libavcodec/libavcodec.a(libx264.o): In function `X264_close': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:231: undefined reference to `x264_encoder_close' 
libavcodec/libavcodec.a(libx264.o): In function `X264_init': 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:284: undefined reference to `x264_param_default' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:292: undefined reference to `x264_param_default_preset' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:305: undefined reference to `x264_param_parse' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:502: undefined reference to `x264_param_apply_fastfirstpass' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:505: undefined reference to `x264_param_apply_profile' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:544: undefined reference to `x264_encoder_open_125' 
/home/mehmet/ffmpeg-0.10.4/libavcodec/libx264.c:554: undefined reference to `x264_encoder_headers' 
./buildnew.sh: 51: ./buildnew.sh: build_one: not found 
+0

음, 첫 번째 문제가 해결되었습니다. 어쨌든이 문제는 다릅니다. 귀하의 컴파일은 libx264 라이브러리를 찾지 못했습니다. 시스템에 제대로 설치 되었습니까? 링크 경로는 libx264가있는 위치의 경로를 제공해야합니다. 나는 그것을 볼 것이라고 생각하지 않는다. – av501

+0

@ av501, 도움에 감사드립니다. Murphy 's Law 덕분에 몇 가지 진전을 보았지만 새로운 오류가 발생했습니다. 글쎄,/home/myname/x264/buildfolder/include와 lib를 가리 키도록 플래그를 변경했다. 나는이 에러들을 얻지 못한다. 실제로 나는이 에러들을 얻지는 못했지만 libx264를 볼 수는 없다.내 ffmpeg 출력 파일이 설치된 폴더의 a. 어떤 아이디어가 그 원인입니까? –

+0

환영합니다. 답변을 수락하고 별도의 질문을하면 다른 사람들도 당신을 도울 수 있습니다. 그동안 x264를 설치했을 때 경로를 확인하지 않아도되는 이유는 말할 수 있습니다. – av501

답변

1

오류는 ffmpeg/libx264와 관련이 없습니다. 당신은 그 의견을 중간에 가질 수 없습니다. 라인 35 : 오류

./buildnew.sh 봐 --extra는-CFLAGS = -I는/usr /가/지역은 포함하지 :

그것은 --extra-CFLAGS를 생각하는 그런 파일이나 디렉토리를 A는 명령 다음에 오는 첫 번째 코멘트 인 everyline에 대한 명령.

귀하의 명령은 계속적이고 의견이 없어야합니다. "\"연산자는 주석에서 작동하지 않습니다.