【问题标题】:How to compile ffmpeg-2.2.2 on windows with cygwin and android ndk r9c如何使用 cygwin 和 android ndk r9c 在 windows 上编译 ffmpeg-2.2.2
【发布时间】:2014-07-04 05:05:50
【问题描述】:

有人编译成功了吗

ffmpeg-2.2.2 在带有 cygwin 和 android ndkr9c 的 Windows 上?

或者可以指点我最新的教程吗?

(http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ 不适合我 我得到 Makefile:2: config.mak: No such file... cygwin admin devel gnome 已完全安装并 make -v ok )

我需要将视频转换为图像(用于动态壁纸)...你知道更好吗? 方法还是ffmpeg最好?

谢谢

【问题讨论】:

标签: android windows android-ndk ffmpeg cygwin


【解决方案1】:

从 Roman 的 tutorial 开始。 以下更改适用于 Windows:您应该使用 NDK make.exe,而不是来自 cygwin 的那个。所以,我只是在我的 build_android.sh 中写了d:/dev/Android/ndk/prebuilt/windows-x86_64/bin/make.exe。由于一些奇怪的原因,我无法运行 make clean - 但我只是选择暂时忽略这个问题。

按照教程,别忘了设置

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64

另外,使用混合样式的路径,即 d:/dev/whatever 而不是 cygwin 样式的 /cygdrive/d/dev/whatever。注意不要使用带空格的路径 - 既不是 ndk 安装,也不是 ffmpeg git clone。

使用 ffmpeg 2.2,您可以将 --target-os=android 用于 ./configure,而不是像 步骤 2 中所述修改 ./configure 文件。

在我的机器上,我没有 prod 命令。我只是选择了伪造他们,写作

echo 'cat $3' > ./pr
echo 'echo od' > ./od

这些不会破坏构建。

所以,我的构建过程如下:

git clean -d -f -x
./configure --enable-shared --disable-static --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver --disable-avdevice --disable-doc --disable-symver --cross-prefix=d:/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin/arm-linux-androideabi- --target-os=android --arch=arm --enable-cross-compile --sysroot=d:/android-ndk-r9c/platforms/android-9/arch-arm/ --extra-cflags="-Os -fpic"

编译确实会显示一些警告,但 .so 文件都已生成。

为了启用 NEON,我使用了

--extra-cflags="-Os -fpic -marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
--extra-ldflags="-Wl,--fix-cortex-a8"

现在,libavcodec.so 无法再构建:链接器列表上有太多文件。 所以,在它崩溃后,我手动启动了链接器:

$ d:/Dev/Android/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64//bin/arm-linux-androideabi-gcc  -shared -Wl,-Bsymbolic -Wl,--version-script,libavcodec/libavcodec.ver -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavresample -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--fix-cortex-a8  --sysroot=d:/Dev/Android/ndk/platforms/android-9/arch-arm/ -isysroot d:/Dev/Android/ndk/platforms/android-9/arch-arm/ -Wl,--as-needed -Wl,--warn-common -Wl,-rpath-link=libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil:libavresample @libavcodec/libavcodec.list -lswresample -lavutil -lm -lz -pthread -o libavcodec/libavcodec.so.55

我对@9​​87654340@文件进行了如下修补:对于$(SUBDIR)$(SLIBNAME_WITH_MAJOR),替换

$$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)

$(Q)echo >$(SUBDIR)lib$(NAME).list $(wordlist 1,400,$(filter %.o,$$<))
$(Q)echo >>$(SUBDIR)lib$(NAME).list $(wordlist 401,999,$(filter %.o,$$<))
$$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) @$(SUBDIR)lib$(NAME).list $(FFEXTRALIBS)

.. 从那里,make 顺利进行。

PS:我使用make -n libavcodec/libavcodec.so.55 准备响应文件 libavcodec/libavcodec.list

PPS:这里是another article,它有助于构建和使用适用于 Android 的 ffmpeg。

【讨论】:

  • 如果对您来说并不复杂。你可以为 Windows 发布准备好的 .sh 文件吗?我可以写 C:/ndk/... 而不是 $NDK/... 吗? Ty 回答这个问题。
  • @VladimirKulyik: C:/ndk 很好。关于.sh 文件,很遗憾,不会是今天。
  • 嗨,我像你一样做了一切,我得到了 ./build_android.sh d:/android-ndk-r9c/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin/ arm-linux-androideabi-gcc 无法创建可执行文件。 C 编译器测试失败。 Makefile:2: config.mak: 没有这样的文件或目录 Makefile:58: /common.mak: 没有这样的文件或目录 Makefile:98: /libavutil/Makefile: 没有这样的文件或目录 Makefile:98: /library.mak:没有这样的文件或目录 Makefile:100: /doc/Makefile: 没有这样的文件或目录 make: *** 没有规则来制作目标`/tests/Makefile'。停止。
  • 在 ubuntu 上试过了,同样的错误.. 你能在 skype elec_29a 上帮我吗?
  • 关于 library.mak 补丁... 在 $(Q)echo >>$(SUBDIR)lib$(NAME).list $(wordlist 401,999,$ (过滤 %.o,$$
【解决方案2】:

在 Ubuntu(Guest) 上构建它并将 lib(/andoid-ndk/sources/ffmpeg/android) 文件夹中的子文件夹复制到 Windows(Host)。我在 Window 上尝试过,但以很多错误结束,最后安装了 Ubuntu (免费)在 virtualbox 上。您还必须下载 Andoid(SDK、Ndk)和 JDK。这可能听起来很奇怪,但它对我有用。

【讨论】:

  • 你能分享你的编译步骤并将其添加到android studio吗?
【解决方案3】:

您可以将其用作 build_android.sh,我对其进行了测试,它对我有效

#!/bin/bash
NDK=D:/android/ndk/android-ndk-r10d
SYSROOT=$NDK/platforms/android-8/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows
function build_one
{
./configure \
--prefix=$PREFIX \
--disable-shared \
--enable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

您还需要运行以下命令:

dos2unix build_android.sh
chmod +x build_android.sh
./build_android.sh

使用this Tutorial 作为参考

【讨论】:

  • dos2unix 和 chmod exe 在 C:\Program Files\Git\usr\bin 目录下,如何在 ffmpeg 文件夹中使用它们?我讨厌这些 cmd 的东西...
猜你喜欢
  • 2013-03-17
  • 2014-03-31
  • 2015-03-10
  • 2012-12-21
  • 2013-08-13
  • 2014-10-18
  • 2013-12-10
  • 2011-07-09
  • 2014-09-11
相关资源
最近更新 更多