【问题标题】:Yet another ffmpeg/libx264 issue又一个 ffmpeg/libx264 问题
【发布时间】:2012-08-25 09:01:25
【问题描述】:

我现在的情况是; ffmpeg 和 libx264 已为 Android 编译,分别作为共享库和静态库。由于我有 libx264.a 和 libffmpeg.so,剩下的就是链接它们并获得一个 ffmpeg 库,让我可以继续我的应用程序。然而,有些问题仍未得到解答。我在 Windows 7 下使用带有虚拟机的 Ubuntu。我使用的是 x264 的最新版本,ffmpeg 0.10.4 版本和 NDK 7。

我尝试调整标志(extracf 和 extrald)以将 libx264 也包含到 ffmpeg 编译过程中,但是我一直失败。您可以在下面找到我的 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 not found 错误。否则,我会收到以下错误。

./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,我还检查了 whereis x264.a,它显示为 /usr/local/lib。我尝试更改路径 $x264 以指向 home/mehmet/x264 文件夹,但我得到了同样的错误。

最后,如果我同时启用了 extracf 和 extrald 标志(注释的和使用的)。我得到了上面提到的同样的错误。恐怕我在这里做了一个简单的错字,但看不到它,这让我发疯。非常感谢你的帮助。

最好的。

编辑

我已经删除了 cmets,现在获取以下内容。

./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

【问题讨论】:

  • 嗯,它确实解决了您的第一个问题。无论如何,这个问题是不同的。您的编译没有找到 libx264 库。它是否正确安装在系统上?您的链接路径应该给出 libx264 所在位置的路径,对吗?我想我没有看到。
  • @av501 ,感谢您的帮助。由于墨菲定律,我取得了一些进展,但遇到了新的错误。好吧,我更改了标志以指出 /home/myname/x264/buildfolder/include 和 lib。我没有收到这些错误,实际上我没有收到任何这些错误,但在安装我的 ffmpeg 输出文件的文件夹中看不到 libx264.a。任何想法是什么原因造成的?
  • 欢迎。如果这有助于接受答案,请单独询问,以便其他人也可以加入帮助您的行列。同时,我会说为什么不检查路径,当您对 x264 进行 make install 时,它去了哪里。
  • 刚刚发生了奇怪的事情。我检查了 libx264 的位置,它告诉我它位于 usr/local/lib 中。我也将它安装在其他地方。当我更改标志以指出我的 x264 安装目录时,它会编译,但会因错误而终止,说它不能 cd 到我的前缀目录(将放置 ffmpeg 构建的位置)。如果我将其更改为 usr/local/lib,则找不到 libx264。这很有趣。
  • 也可能是权限问题。执行 ls -l 检查。可能是无处链接的链接。

标签: android ubuntu ffmpeg shared-libraries libx264


【解决方案1】:

您的错误与 ffmpeg/libx264 无关。你不能在中间放那些 cmets。看看错误

./buildnew.sh: line 35: --extra-cflags=-I/usr/local/include: 没有这样的文件或目录

它认为 --extra-cflags 是一个命令,以此类推,用于注释后的第一行。

您的命令应该是连续的并且没有任何 cmets。 "\" 运算符不适用于 cmets。

【讨论】:

    猜你喜欢
    • 2011-09-11
    • 1970-01-01
    • 2012-02-28
    • 2014-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多