1

私の現在の状況は; ffmpeg と libx264 は、それぞれ共有ライブラリと静的ライブラリとして Android 用にコンパイルされています。私は libx264.a と libffmpeg.so を持っているので、残っているのはそれらをリンクして、アプリケーションを続行できるようにする ffmpeg ライブラリを取得することだけです。ただし、いくつかの質問は未回答のままです。Windows 7 の仮想マシンで Ubuntu を使用しています。x264 の最新バージョンである ffmpeg 0.10.4 リリースと NDK 7 を使用しています。

libx264 から ffmpeg へのコンパイル プロセスを含めるために、フラグ (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 

ディレクトリ /home/mehmet/x264 に x264 がインストールされており、x264.a がどこにあるかも確認すると、/usr/local/lib と表示されます。home/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
4

1 に答える 1

1

エラーは ffmpeg/libx264 とは関係ありません。それらのコメントを途中で使用することはできません。エラーを見てください

./buildnew.sh: 35 行目: --extra-cflags=-I/usr/local/include: そのようなファイルやディレクトリはありません

--extra-cflags は、コメントの後の最初の行ごとにコマンドなどと見なされます。

コマンドは継続的で、コメントを付けないでください。「\」演算子はコメントからは機能しません。

于 2012-08-30T17:08:40.737 に答える