从罗马开始tutorial http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/。
以下更改适用于 Windows:您应该使用NDK make.exe
,不是来自cygwin。所以,我简单地写了d:/dev/Android/ndk/prebuilt/windows-x86_64/bin/make.exe
in my build_android.sh。由于某种奇怪的原因,我无法运行make clean
- 但我现在只是选择忽略这个问题。
遵循教程后,不要忘记设置
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64
另外,使用混合样式的路径,即d:/dev/whatever
并不是cygwin style /cygdrive/d/dev/whatever
。注意不要使用带空格的路径 - 也不用于ndk安装,也不用于ffmpeg
git 克隆。
With FFmpeg 2.2, 您可以使用--target-os=android
for ./configure
,而不是破坏./configure
文件中描述的step 2.
在我的机器上,我没有pr
and od
命令。我选择简单地伪造它们,写
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"
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