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将识别不了。
(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将识别不了。
相关文章推荐
- 用NDK编译FFmpeg时遇到的问题
- Ubuntu12.04 32位 + android-ndk-r9c 编译ffmpeg遇到的问题记录
- buntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
- buntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
- NDK编译X265库到ARM,遇到问题
- 【android NDK及JNI】ubuntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题 .
- 编译ffmpeg,在执行ndk-build clean时遇到的问题
- NDK r12b下编译安卓FFmpeg arm64架构出现的奇葩问题
- Ubuntu12.10 64位 + android-ndk-r9 编译ffmpeg遇到的问题
- 总结用cygwin+eclipse+NDK编译hellojni的详细步骤,以及所遇到问题的解决方法
- NDK编译FFMPEG所遇问题的解决方法(一)
- 在用VS和Intel C++ Complier编译下面两个移植到Windows下的FFmpeg时遇到的问题
- 解决Cygwin编译cocos2dx 遇到的 error: 'UINT64_C' was not declared in this scope 问题
- Cygwin下编译MySQL源码遇到的问题解决方法
- cygwin下配置android-ndk时遇到的各种问题及解决方案
- 使用NDK r9c编译安卓项目并打包--遇到的问题【持续更新】
- cocos2d-x-2.2.0_win7+vs2010搭建_eclipse+ndk-r9+cygwin搭建_教程以及编译问题汇总
- Cygwin中用NDK来编译程序出现"No such file or directory"问题
- 关于Cygwin中编译FFmpeg时执行sh文件出现arm-linux-androideabi-gcc is unable to create an executable file.
- x264和FFMPEG 编译后遇到的一些问题:UINT64_C,