x264代码剖析(四):vs2010编译x264错误集锦
2023-09-14 08:57:58 时间
支持VC++平台的x264的最新版本是x264-20091006,接下来就以该版本为例分析编译运行x264过程中遇到的问题以及解决办法。
1、error C2143: syntax error : missing ; before type
错误提示:
错误原因:MS的VS编译器对C99标准支持不好,不支持函数当中混合定义、声明变量。
解决办法:在函数开头统一定义变量。
示例源码:
static ALWAYS_INLINE int x264_exp2fix8( float x ) if( x = 512.f/6.f ) return 0; if( x = -512.f/6.f ) return 0xffff; int i = x*(-64.f/6.f) + 512; return (x264_exp2_lut[i 63]+256) (i 6) 8; }
修改后代码:
static ALWAYS_INLINE int x264_exp2fix8( float x ) int i; if( x = 512.f/6.f ) return 0; if( x = -512.f/6.f ) return 0xffff; i = x*(-64.f/6.f) + 512; return (x264_exp2_lut[i 63]+256) (i 6) 8; }
注:x264代码中有十几处类似的错误,只需一一改正过来就可以了。
2、error C2059: syntax error : [
错误代码:
static const uint8_t check_mv_lists[X264_MBTYPE_MAX] = {[P_L0]=1, [B_L0_L0]=1, [B_L1_L1]=2};
修改为:
static const uint8_t check_mv_lists[X264_MBTYPE_MAX] ={0,0,0,0,1,0,0,0,1,0,0,0,2,0,0,0,0,0,0};
3、error C2146: syntax error : missing ) before identifier PRIx32
错误代码:
fprintf( stderr, "Bad header magic (%"PRIx32" = %s)\n",*((uint32_t*)header), header );
修改为:
fprintf( stderr, "Bad header magic (%ld %s)\n", *((uint32_t*)header), header );
4、error LNK2019: unresolved external symbol _x264_lookahead_init referenced in function _x264_encoder_open_76
这是由于libx264工程没有添加lookahead.c文件,从而缺少几个函数的定义造成的,错误提示如下图:
解决方法:添加lookahead.c进工程,如下图所示:
解决办法:重新定义一下log2f(x)即可,在osdep.h中添加log2f(x)定义,加入的代码如下:
#ifdef _MSC_VER #define inline __inline #define strcasecmp stricmp #define strncasecmp strnicmp #define snprintf _snprintf #define fseek _fseeki64 #define ftell _ftelli64 #define isfinite _finite #define strtok_r strtok_s #define _CRT_SECURE_NO_DEPRECATE #define X264_VERSION "" // no configure script for msvc #define log2f(x) (logf(x)*1.4426950408889634f) #endif
截止目前,应该可以把所有的问题都解决了,出现了大家最喜欢的Build succeeded。
编译成功的源码包下载地址:http://download.csdn.net/detail/frd2009041510/9455143
如果你使用惯了linux,你会对软件包管理、命令行不能自拔。由于mac的底层是类unix系统,也可以配置向linux一样好用。
安装HomeBrew /usr/bin/ruby -e $(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install) 上面必须先有ruby以及其他开发环境支持,建议安装xcode后使用以上命令安装。
相关文章
- 佳能MP258的5200错误和P08代码解决方法及清零方法
- RACLE 错误 12899 处理, oracle 11g 更改字符集
- 120. 如何根据 SAP UI5 框架代码抛出的错误消息,反查出是哪一行代码引起的错误消息
- 如何根据 SAP UI5 框架代码抛出的错误消息,反查出是哪一行代码引起的错误消息试读版
- 使用代码创建Hybris storefront订单时遇到错误No result for the given example [TitleModel (&
- SAP CRM中间件下载equipment时遇到的一个错误
- WCF 自定义工具错误: 无法生成服务引用“{0}”的代码
- WCF 自定义工具错误: 无法生成服务引用“{0}”的代码
- Atitit 增强代码健壮性 出错继续执行恢复模式,就像vbs那样我以为我可以使用Try/Catch,但是我找不到异常后是否可以继续执行代码,并且找不到如何在最后显示错误消息。目录PHP
- atitit.错误:找不到或无法加载主类 的解决 v4 qa15.doc
- 解决Ubuntu环境变量错误导致无法正常登录
- 使用node https module创建服务器遇到的mac verify failure错误消息
- iOS 百度地图:手动(pod)导入百度步骑行导航的时候,不断报出下面的错误
- mysql错误及解决(1)
- VS2017报错:严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C4996 'strcpy': This function or variable may be unsafe. Consid
- NRF52832 SDK15.2.0致命错误debug排查定位
- 解决Mapped Statements collection does not contain value for xxx的错误
- 记录一次使用git工具拉取coding上代码密码账号错误的经历
- 【错误记录】Android Studio 编译报错 ( Module was compiled with an incompatible version of Kotlin. The binary )
- 【错误记录】Android Studio 中查看 Gradle 配置的方法源码 ( 配置 gradle-wrapper.properties 中版本为 gradle-x.x.x-all.zip )
- 【错误记录】Groovy工程中的文件查找策略 ( main 函数中需要使用 src/main/groovy/Script.groovy | Groovy 脚本直接使用代码相对路径 )
- warning: control reaches end of non-void function:错误解决
- 关于Recon-ng的“[!] Unable to synchronize module index. (ConnectionError),等一系列ConnectionError错误”
- 操作系统权限提升(八)之系统错误配置-注册表键AlwaysInstall提权