如何使用 cygwin 和 android ndk r9c 在 windows 上编译 ffmpeg-2.2.2 [英] How to compile ffmpeg-2.2.2 on windows with cygwin and android ndk r9c
问题描述
有人编译成功了
ffmpeg-2.2.2 在带有 cygwin 和 android ndkr9c 的 windows 上?
ffmpeg-2.2.2 on windows with cygwin and android ndkr9c ?
或者可以指点我一个最新的教程吗?
Or can point me to an up to date tutorial ?
(http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ 对我不起作用我得到 Makefile:2: config.mak: 没有那个文件...cygwin admin devel gnome 已完全安装并且 make -v ok )
(http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/ isn't working for me i get Makefile:2: config.mak: No such file... cygwin admin devel gnome is completely installed and make -v ok )
我需要将视频转换为图像(用于动态壁纸)...你知道吗?方法还是 ffmpeg 最好?
I need to convert a video to images(for live-wallpaper)... do you know a better method or is ffmpeg the best ?
谢谢
推荐答案
从 Roman 的 教程.以下更改适用于 Windows:您应该使用 NDK make.exe
,而不是来自 cygwin 的那个.所以,我只是在我的 build_android.sh 中写了 d:/dev/Android/ndk/prebuilt/windows-x86_64/bin/make.exe
.出于某种奇怪的原因,我无法运行 make clean
- 但我现在只是选择忽略这个问题.
Start with Roman's tutorial.
Following changes apply to Windows: you should use the NDK make.exe
, not the one from cygwin. So, I simply wrote d:/dev/Android/ndk/prebuilt/windows-x86_64/bin/make.exe
in my build_android.sh. For some weird reason, I could not run make clean
- but I simply chose to ignore this problem for now.
跟着教程,别忘了设置
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64
另外,使用混合样式的路径,即 d:/dev/whatever
而不是 cygwin 样式的 /cygdrive/d/dev/whatever
>.注意不要使用带空格的路径 - 既不用于 ndk 安装,也不用于 ffmpeg
git clone.
Also, use mixed-style paths, i.e. d:/dev/whatever
and not cygwin style /cygdrive/d/dev/whatever
. Be careful not to use paths with spaces - neither for ndk installation, nor for ffmpeg
git clone.
使用 ffmpeg 2.2,您可以将 --target-os=android
用于 ./configure
,而不是修改 ./configure
文件,如步骤 2 中所述.
With ffmpeg 2.2, you can use --target-os=android
for ./configure
, instead of mangling ./configure
file as described in step 2.
在我的机器上,我没有 pr
和 od
命令.我选择简单地伪造它们,写作
On my machine, I did not have pr
and od
commands. I chose simply to fake them, writing
echo 'cat $3' > ./pr
echo 'echo od' > ./od
这些不会破坏构建.
所以,我的构建过程如下:
So, my build process is as follows:
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 文件都生成了.
Compilation does display some warnings, but the .so files are all produced.
为了启用 NEON,我使用了
To enable NEON, I used
--extra-cflags="-Os -fpic -marm -march=armv7-a -mfloat-abi=softfp -mfpu=neon"
--extra-ldflags="-Wl,--fix-cortex-a8"
现在,libavcodec.so
无法再构建:链接器列表上的文件太多.所以,在它崩溃后,我手动启动了链接器:
Now, libavcodec.so
could not be built anymore: too many files on the linker list. So, after it crashed, I launched the linker manually:
$ 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
我按如下方式修补 library.mak
文件:对于 $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
,替换
I patch the library.mak
file as follows: for $(SUBDIR)$(SLIBNAME_WITH_MAJOR)
, replace
$$(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
顺利进行.
.. and from there, make
proceeded smoothly.
PS:我使用make -n libavcodec/libavcodec.so.55
来准备响应文件 libavcodec/libavcodec.list
.
PS: I used make -n libavcodec/libavcodec.so.55
to prepare the response file libavcodec/libavcodec.list
.
PPS:这里是另一篇文章有助于为 Android 构建和使用 ffmpeg.
PPS: Here is another article that helps to build and use ffmpeg for Android.
这篇关于如何使用 cygwin 和 android ndk r9c 在 windows 上编译 ffmpeg-2.2.2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!