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大笑

目录
相关文章
|
27天前
|
JavaScript Java 大数据
基于springboot的美食文化和旅游推广系统
本研究聚焦美食文化与旅游推广系统的融合,探讨如何借助Java、Vue.js等技术构建数字化平台,整合地域美食资源与旅游产业,推动文化传承与经济协同发展。
|
Linux 关系型数据库 Oracle
|
5月前
|
人工智能 IDE 定位技术
AI IDE正式上线!通义灵码开箱即用
作为AI原生的开发环境工具,通义灵码AI IDE深度适配了最新的千问3大模型,并全面集成通义灵码插件能力,具备编程智能体、行间建议预测、行间会话等功能。
799 13
|
11月前
|
存储 图形学
手机广告常见的10bit是什么?YUV444、YUV422、YUV420、YUV411是什么?
10bit色深相较于8bit,能提供更多的灰阶和显色数,使色彩过渡更加平滑,减少色带现象。YUV444、YUV422、YUV420、YUV411是不同的采样方式,通过减少UV分量来节省空间。YUV420和YUV411虽都是每4个Y分量用1组UV分量,但YUV420在垂直方向上交替存储U和V,而YUV411仅在水平方向上进行4:1抽样。
|
9月前
|
Web App开发 存储 开发者
Chrome 插件上架发布全流程指南
浏览器插件开发完以后,要发布到 Chrome Web Store上,也是需要颇费一番周折的,本文就从注册账号开始,一直到最后发布上架的全流程进行指导,希望帮助你提供一些经验,避免踩坑,耗时耗力。
750 8
|
缓存 监控 负载均衡
微服务架构下的API网关设计与实现
在分布式系统和微服务架构中,API网关扮演着至关重要的角色。它不仅是服务的单一入口点,还负责请求的路由、负载均衡、认证授权、限流熔断等关键功能。本文将深入探讨API网关的设计理念、核心组件以及实现策略,旨在为开发者提供一套完整的API网关解决方案。通过分析现代微服务架构的需求,结合最新的技术趋势,我们将展示如何构建一个高效、可靠且易于维护的API网关。
277 0
|
存储 数据管理 Linux
Linux - 记录问题:docker 迁移 更改镜像默认位置的注意事项
Linux - 记录问题:docker 迁移 更改镜像默认位置的注意事项
363 0
|
SQL 存储 分布式计算
基于Hadoop数据仓库Hive1.2部署及使用
基于Hadoop数据仓库Hive1.2部署及使用
|
敏捷开发 持续交付
探索现代软件开发中的敏捷实践
【7月更文挑战第8天】 在快速变化的技术世界中,敏捷开发已经成为了软件开发团队的必选策略。本文旨在深入探讨敏捷实践在现代软件开发中的应用,并分析其对项目成功的影响。通过实际案例分析,我们将揭示敏捷方法如何提高团队效率、增强产品功能以及缩短上市时间。文章不仅为软件开发专业人士提供实用指南,同时也为非技术读者呈现敏捷转型的洞见。
|
Linux 网络安全 数据安全/隐私保护
Linux NFS协议:实现文件共享与远程访问
NFS(Network File System)是一种在计算机网络上实现文件共享的协议,允许多台计算机共享文件和目录。在Linux系统中,NFS协议被广泛用于实现文件在网络中的共享和远程访问。本文将深入解析Linux下的NFS协议,包括工作原理、配置、使用方法以及安全性措施,帮助读者全面了解NFS协议在实现文件共享和远程访问中的应用。
1633 1