configure 命令

./configure --target-os=linux --arch=armv41 --enable-cross-compile --cc=/cygdrive/c/android/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin/arm-eabi-gcc --cross-prefix=/cygdrive/c/android/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin  --nm=/cygdrive/c/android/android-ndk-1.5_r1/build/prebuilt/windows/arm-eabi-4.2.1/bin/arm-eabi-nm --extra-cflags="-fPIC -DANDROID " --extra-ldflags="-s -nostdlib -Bdynamic -Wl,-T,armelf.x -Wl,-dynamic-linker,/system/bin/linker -lc -lm -ldl crtbegin.o crtend.o --disable-static --enable-shared--disable-static --enable-shared 这个命令是编译shared版本的,完成之后还需要手动修改ar,nm,strip命令,默认是标准gcc要把其修改成arm-eabi为前缀的,还要注意全路径。 编译的时候,restrict的关键词arm-eabi-gcc不认识,可能是编译命令的问题,印象当中从gcc 3.4开始就应该支持了,没办法,只能将所有出现的strict关键词给去掉了。 把libavutil/internal.h中的 #if !HAVE_LLRINT static av_always_inline av_const long long llrint(double x) {     return rint(x); } #endif /* HAVE_LLRINT */ #if !HAVE_LRINT static av_always_inline av_const long int lrint(double x) {     return rint(x); } #endif /* HAVE_LRINT */ #if !HAVE_LRINTF static av_always_inline av_const long int lrintf(float x) {     return (int)(rint(x)); } #endif /* HAVE_LRINTF */ #if !HAVE_ROUND static av_always_inline av_const double round(double x) {     return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5); } #endif /* HAVE_ROUND */ #if !HAVE_ROUNDF static av_always_inline av_const float roundf(float x) {     return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5); } #endif /* HAVE_ROUNDF */ #if !HAVE_TRUNCF static av_always_inline av_const float truncf(float x) {     return (x > 0) ? floor(x) : ceil(x); } #endif /* HAVE_TRUNCF */ 这些代码删除掉。 编译完成在andriod运行失败,还在调试当中。由于andriod没有提供gdbserver所以,只能以日志的形式来调试输出了。 andriod中log的组件,不知道在c中是否能调用,需要研究一下。 接上: 支持log,只需包含#inlcude 即可 使用方法: __android_log_vprint(ANDROID_LOG_DEBUG, "FFmpeg", fmt, vl); static void ding_log(void* ptr, int level, const char* fmt, va_list vl) {     //printf(fmt); //vfprintf(stderr, fmt, vl); __android_log_vprint(ANDROID_LOG_DEBUG, "FFmpeg", fmt, vl); } 这样就可以使用android的long方法了。 加入日志之后,发现在libavcodec/opt.c中的av_opt_set_defaults2函数,调用av_set_int时,最后是在av_set_number2,调用case FF_OPT_TYPE_INT:  av_log(0, 10, "num %d, den %d /n", num, den);  *(int       *)dst= llrint(num/den)*intnum; break; crash,具体原因还在调查之中,下午请假,回家了。 医院不上班,下周一再请,又回来上班了。 今天终于找到问题所在了,在libavcodec/optionts.c中有个定义 static const AVOption options[]={ 去掉下面2行,即可运行成功了,对这些代码的作用不大清楚,需要深入研究。明白了,这是设定AVCodecContext结构每个变量的初始值。 //{"skip_idct"       , NULL, OFFSET(skip_idct)       , FF_OPT_TYPE_INT, AVDISCARD_DEFAULT, INT_MIN, INT_MAX, V|D, "avdiscard"}, //{"skip_frame"      , NULL, OFFSET(skip_frame)      , FF_OPT_TYPE_INT, AVDISCARD_DEFAULT, INT_MIN, INT_MAX, V|D, "avdiscard"}, 把 libavcodec.so.52, libavformat.so.52, libavutil.so.49,上传到android的模拟器里的/system/lib里面。 这样看来的话,用静态库比较好,要编译静态库,只需把configure改成--disable-shared --enable-static就可以了。 这样简单的例子就能运行了。

更多相关文章

  1. Android固件img文件的解包, 修改和打包的命令行操作
  2. [APP] Android 开发笔记 001-环境搭建与命令行创建项目
  3. Android Studio第三十四期 - git企业级应用命令
  4. Android 8.0 Tv 修改以太网ip地址 掩码 网关 DNS及DHCP和静态切
  5. 调试android ethernet 的常用命令
  6. Android 技巧:命令行运行 sqlite3
  7. android git 打包命令
  8. Android静态注册广播receiver检测WIFI连接状况变化

随机推荐

  1. Android修改状态栏颜色即状态栏字体颜色
  2. Android学习分享-常见控件01-TextView详
  3. 配置android手机下方的三个按键震动
  4. android动态加载ClassLoader机制
  5. android 图标在eclipse中不显示
  6. android如何查看app的内存占用情况
  7. 【原创】Android学习历程..持续中
  8. Android中ContextMenu用法实例
  9. Android拓展系列(9)--Android视频录制scr
  10. android绘制几何图形