您的位置:首页 > 其它

cygwin下ndk arm交叉编译器编译ffmpeg遇到的问题(1)

2015-05-18 17:41 363 查看
最近在cygwin环境下用NDK交叉编译工具编译ffmpeg,在configure阶段折腾了几天,老是不成功,后发现主要原因竟然只是目录路径名称写法不对,路径名不能用/cygdrive/d来开头,而要用d:/这种形式,真是坑爹啊……

(1)安装cygwin,下载NDK r10

配置NDK安装目录环境变量:export NDK_ROOT=d:/Software/android-ndk32-r10-windows-x86_64/android-ndk-r10。严重注意这里!路径名开头不能写成/cygdrive/d/,不然configure不成功。

(2)编写脚本,例如:

#!/bin/sh

SYSROOT=$NDK_ROOT/platforms/android-19/arch-arm

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

export TEMPDIR=f:/Temp

./configure \

--prefix=/usr/local \

--enable-shared \

--disable-static \

--disable-doc \

--disable-ffserver \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffprobe \

--disable-avdevice \

--disable-devices \

--disable-encoders \

--disable-muxers \

--enable-cross-compile \

--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

--target-os=linux \

--sysroot=$SYSROOT \

--arch=arm \

--extra-cflags="-Os -fpic" \

--extra-ldflags="-Wl,-rpath-link=$SYSROOT/usr/lib -nostdlib -L$SYSROOT/usr/lib -lc -lm -ldl"

(3)make

编译过程中会遇到错误,相应的解决方法以后再说明

上面第(1)(2)步需要注意如下几个问题:

(a)临时目录TEMPDIR的路径也是一样的要求开头不能用/cygdrive/,不然configure会失败出现如下错误提示:

d:/Software/android-ndk32-r10-windows-x86_64/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/windows-x86_64/bin/arm-linux-androideabi-gcc is unable to create an executable file.

C compiler test failed.

If you think configure made a mistake, make sure you are using the latest

version from Git. If the latest version fails, report the problem to the

ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net.

Include the log file "config.log" produced by configure as this will help

solving the problem.

意思是C编译器测试失败。刚开始不知道什么原因造成的这个问题,后发现configure过程会产生日志文件config.log,文件中提示找不到用来测试C编译器用的一个临时生成的C文件。(config.log这个日志很有帮助!!!)

(b)NDK_ROOT的路径开头如果写成/cygdrive/,configure会失败,config.log文件中就会提示找不到lc,lm,ldl这几个库文件。即使不加 -L$SYSROOT/usr/lib -lc -lm -ldl这个链接选项,configure能成功;但在之后的make中编译也会失败,提示找不到一些标准头文件(如stdint.h)。因为arm-linux-androideabi-gcc交叉编译器需要设置--sysroot选项,sysroot用来设置编译时需要的头文件和库文件的目录路径,如果用/cygdrive/这种形式来表示路径的话,arm-linux-androideabi-gcc将识别不了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: