x264代码剖析(四):vs2010编译x264错误集锦

简介: <p></p> <h1 style="text-align:center">x264<span style="font-family:宋体">代码剖析(四):</span><span style="font-family:Calibri">vs2010</span><span style="font-family:宋体">编译</span><span style="font-family

x264代码剖析(四):vs2010编译x264错误集锦

 

        支持VC++平台的x264的最新版本是x264-20091006,接下来就以该版本为例分析编译运行x264过程中遇到的问题以及解决办法。

 

1error C2143: syntax error : missing ';' before 'type'

 

错误提示:



错误原因:MSVS编译器对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代码中有十几处类似的错误,只需一一改正过来就可以了。


2error 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};


3error 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 );


4error LNK2019: unresolved external symbol _x264_lookahead_init referenced in function _x264_encoder_open_76

 

        这是由于libx264工程没有添加lookahead.c文件,从而缺少几个函数的定义造成的,错误提示如下图:


        

         解决方法:添加lookahead.c进工程,如下图所示:




5error LNK2019: unresolved external symbol _log2f referenced in function _x264_analyse_init_costs

 

         解决办法:重新定义一下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大笑

目录
相关文章
|
3月前
|
C语言
针对MTK MODIS 出错的几个解决办法(原创)
针对MTK MODIS 出错的几个解决办法(原创)
25 2
|
Linux
全网首发:LINUX编译JNA:编译产生libjnidispatch.so
全网首发:LINUX编译JNA:编译产生libjnidispatch.so
153 0
|
Linux
全网首发:LINUX编译JNA:编译libffi
全网首发:LINUX编译JNA:编译libffi
63 0
|
安全
[经验]使用Keil MDK+Jlink-OB下载失败的解决办法
[经验]使用Keil MDK+Jlink-OB下载失败的解决办法
489 0
[经验]使用Keil MDK+Jlink-OB下载失败的解决办法
|
开发框架 NoSQL Java
GDB调试.NET程序实录-.N ET调用.so出现问题怎么解决
GDB调试.NET程序实录-.N ET调用.so出现问题怎么解决
238 0
GDB调试.NET程序实录-.N ET调用.so出现问题怎么解决
|
Java Linux Shell
jemalloc编译出错?没事,这里有成功的linux环境的编译及使用方案(★firecat推荐★)
jemalloc编译出错?没事,这里有成功的linux环境的编译及使用方案(★firecat推荐★)
782 0
|
Web App开发 Linux 开发工具
CentOS 7安装并启动Google浏览器(★firecat亲测有效★)
CentOS 7安装并启动Google浏览器(★firecat亲测有效★)
980 0
|
存储 NoSQL 前端开发
MIT 6.828 操作系统工程 2018 fall xv6 lab1 笔记 and 中文注释源代码阅读
MIT 6.828 操作系统工程 2018 fall xv6 lab1 笔记 and 中文注释源代码阅读 mit 6.828 lab 代码和笔记,以及中文注释源代码已放置在github中: https://github.com/yunwei37/xv6-labs
1833 0
AdobeAfterEffectsCC2017中文完整版永久破解注册安装教程AECC2017破解下载AECC2017安装AECC2017注册机
视频教程 AECC2017安装教程AftereffectsCC2017_腾讯视频 点击链接:直接跳转腾讯视频观看蓝光画质安装视频教程 图文教程 原文链接:Adobe After effects CC 2017图文/视频安装教程 首先第一步,在我公众号【尹训标】回复:AE,获取软件。
3569 0
|
Java Linux 应用服务中间件
亲测Mac和Linux安装Tomcat,不服来战
一、今天需要使用到本地的Tomcat,结果在网上找了下教程,都是假的,都有问题,都没有经过测试,不负责任啊啊啊,坑爹坑爹。 Mac正确安装Tomcat的姿势 首先访问一下Tomcat的官网: Tomcat官网 想下载什么版本就点击什么版本 二、下面以Tomcat9为例,Mac和Linux的一定要下载tar.
1295 0