Android 另一个ffmpeg/libx264问题
我现在的情况是,;ffmpeg和libx264分别作为共享库和静态库为Android编译。既然我有libx264.a和libffmpeg.so,唯一剩下的就是链接它们并获得一个ffmpeg库,它允许我继续我的应用程序。然而,一些问题仍然没有答案。我在Windows7下使用Ubuntu和虚拟机。我使用的是x264的最新版本,ffmpeg 0.10.4发行版和NDK 7 我曾尝试调整标志(Extraf和extrald),以便将libx264也包括到ffmpeg编译过程中,但一直失败。下面您可以找到我的ffmpeg构建脚本以及我遇到的错误Android 另一个ffmpeg/libx264问题,android,ubuntu,ffmpeg,shared-libraries,libx264,Android,Ubuntu,Ffmpeg,Shared Libraries,Libx264,我现在的情况是,;ffmpeg和libx264分别作为共享库和静态库为Android编译。既然我有libx264.a和libffmpeg.so,唯一剩下的就是链接它们并获得一个ffmpeg库,它允许我继续我的应用程序。然而,一些问题仍然没有答案。我在Windows7下使用Ubuntu和虚拟机。我使用的是x264的最新版本,ffmpeg 0.10.4发行版和NDK 7 我曾尝试调整标志(Extraf和extrald),以便将libx264也包括到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,我还检查了x264.a的位置,它显示为/usr/local/lib。我尝试更改路径$x264以指向home/mehmet/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
您的错误与ffmpeg/libx264无关。你不能把这些评论放在中间。看看这个错误 ./buildnew.sh:第35行:--extra-cflags=-I/usr/local/include:没有这样的文件或目录 它认为--extra-cflags是一个命令,依此类推,它是注释后的第一个命令
您的命令应该是连续的,没有任何注释。“\”运算符不能根据注释工作。您的错误与ffmpeg/libx264无关。你不能把这些评论放在中间。看看这个错误 ./buildnew.sh:第35行:--extra-cflags=-I/usr/local/include:没有这样的文件或目录 它认为--extra-cflags是一个命令,依此类推,它是注释后的第一个命令
您的命令应该是连续的,没有任何注释。“\”运算符不能根据注释工作。好吧,它确实解决了您的第一个问题。无论如何,这个问题是不同的。您的编译找不到libx264库。它是否正确安装在系统上?链接路径应该给出libx264所在位置的路径,对吗?我想我没看到。@av501,谢谢你的帮助。多亏了墨菲定律,我取得了一些进步,但也遇到了新的错误。我将标志改为指向/home/myname/x264/buildfolder/include和lib。我没有收到这些错误,实际上我没有收到任何这些错误,但在安装ffmpeg输出文件的文件夹中看不到libx264.a。你知道是什么原因吗?欢迎。如果这有助于接受答案,请另找一个答案,这样其他人也可以帮助你。在此期间,我会说为什么不;当你把x264安装到哪里的时候,你没有检查路径。奇怪的事情发生了。我检查了libx264的位置,它显示它位于usr/local/lib中。我还把它安装在其他地方。当我更改标志以指出我的x264安装目录时,它会编译,但终止时会出现一个错误,说明它无法cd到我的前缀目录(ffmpeg构建将放在这里)。如果我将其更改为usr/local/lib,它将找不到libx264。这很有趣。可能还有权限问题。做一个ls-l检查。可能是无处链接的链接。好吧,它确实解决了你的第一个问题。无论如何,这个问题是不同的。您的编译找不到libx264库。它是否正确安装在系统上?链接路径应该给出libx264所在位置的路径,对吗?我想我没看到。@av501,谢谢你的帮助。多亏了墨菲定律,我取得了一些进步,但也遇到了新的错误。我将标志改为指向/home/myname/x264/buildfolder/include和lib。我没有收到这些错误,实际上我没有收到任何这些错误,但在安装ffmpeg输出文件的文件夹中看不到libx264.a。你知道是什么原因吗?欢迎。如果这有助于接受答案,请另找一个答案,这样其他人也可以帮助你。在此期间,我会说为什么不;当你把x264安装到哪里的时候,你没有检查路径。奇怪的事情发生了。我检查了libx264的位置,它显示它位于usr/local/lib中。我还把它安装在其他地方。当我更改标志以指出我的x264安装目录时,它会编译,但终止时会出现一个错误,说明它无法cd到我的前缀目录(ffmpeg构建将放在这里)。如果我将其更改为usr/local/lib,它将找不到libx264。这很有趣。可能还有权限问题。做一个ls-l检查。可能是无处链接的链接。