vs2015升级旧工程报snprintf已有主体及“int8_t” 重定义
我现在用的VisualStudio 最新版本 visual studio 2015,按提示将旧工程转成了vs2015格式。
然后编译,报出无数错误。。。
c:\program files (x86)\microsoft visual studio 14.0\vc\include\stdint.h(17): error C2371: “int8_t”: 重定义;不同的基类型
函数“int snprintf(char *const ,const size_t,const char *const ,…)”已有主体
。。。。。
看到上面的一大堆报错,脑子一下子就晕了,尼玛,什么玩意儿,编译器支持这么差?没有说明不支持vs编译器啊。
仔细分析上面的错误信息,发现主要就是snprintf
、int8_t
和timespec
重定义,
考虑到vs2015比较新,用google搜索了一下”tcmalloc vs2010”,发现了这篇文章《TCMalloc static lib in vs2010》
文中解决的问题我并不关心,但我发现了这个:(#define WIN32_OVERRIDE_ALLOCATORS in config.h).
在项目工程下面果然发现找到了文中提到的config.h以及提到的宏定义WIN32_OVERRIDE_ALLOCATORS
config.h
通过宏定义来控制代码生成。在不同的编译器下编译,要根据编译报错的信息来相应修改config.h
来解决。上图中最后一行,就是关于snprintf的
/* Define to 1 if your libc has a snprintf implementation */
#undef HAVE_SNPRINTF
根据注释的说明,如果编译已经有snprintf 的实现,就要将HAVE_SNPRINTF
定义为1
在config.h
中找到下面的定义
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
改为
/* Define to 1 if you have the <stdint.h> header file. */ #define HAVE_STDINT_H 1
这是port.h中的关于timespec的代码片段,看代码注释,是因为mingw没有定义timespc,而且mingw64中有定义,所以有点混乱,所以在这里用_TIMESPEC_DEFINED
来做一个保护
// mingw64 seems to define timespec (though mingw.org mingw doesn't),
// protected by the _TIMESPEC_DEFINED macro.
#ifndef _TIMESPEC_DEFINED
struct timespec {int tv_sec; int tv_nsec; }; #endif
而在<time.h>
是通过_CRT_NO_TIME_T
来控制是否定义timespec
#ifndef _CRT_NO_TIME_Tstruct timespec{time_t tv_sec; // Seconds - >= 0long tv_nsec; // Nanoseconds - [0, 999999999] }; #endif
所以在config.h
中加入下面一行,以去掉time.h
中的timespec
定义
#define _CRT_NO_TIME_T 1
最后保存config.h
再编译,就可以通过了。
但是,编译通过只是第一步,是否能真的正常使用,还有待后面工作进行验证。
结论
要正确编译tcmalloc,应该根据c++编译器类型和版本的不同,修改config.h
以达到与编译工具最匹配的状态,config.h
中还有很多选项没有仔细研究,需要进一步深入了解。
vs2015升级旧工程报snprintf已有主体及“int8_t” 重定义相关推荐
- eclipse导入已存在工程报 Faceted Project Problem 错误
现象: 向eclipse里面导入已存在工程时,报如下错误: Description Resource Path Location Type Target runtime Apache Tomca ...
- eclise导入已存在工程报 Faceted Project Problem 错误
现象: 向eclipse里面导入已存在工程时,报如下错误: Description Resource Path Location Type Target runtime Apache Tomcat ...
- VS2015新建C++工程时,Object reference not set to an instance of an object
意思是未将对象引用设置到实例. 刚在Windows7 64位上安装VS2015,创建工程时,就弹出此报错框. 解决办法: 在window中打开功能里输入regedit,回车打开注册器.然后进入如下路径 ...
- 职教云打卡可以补签吗_雁城“网红路”升级改造,部分红叶李已被挖出,以后还可以在此地打卡吗?...
近日,有有网友询问:资阳城区大千路目前是在扩道还是改造?大千路是市民心中的"网红路",那里的红叶李会被移走吗? 带着市民的问题,记者赶往大千路了解情况."砰砰砰!&quo ...
- eclipse导入工程报错Faceted Project Problem(1 item)
问题描述: 我把完整的项目从Windows系统中复制到Ubuntu中,在Ubuntu中导入到eclipse之后,报错"eclipse导入工程报错Faceted Project Problem ...
- Windows Server 2003 sp1升级到sp2报错解决办法
Windows Server 2003 sp1升级到sp2报错解决办法 [问题描述]今天利用360安全卫士,检测Windows Server 2003 sp1更新包,并升级到sp2时,报如下错误: [ ...
- rockbox eq_使用Rockbox升级旧iPod
rockbox eq If you are tired of trying to keep up with Apple's new iPod releases, upgrade your old iP ...
- 关于C#调用非托管DLL,报“内存已损坏的”坑,坑,坑
因客户需求,与第三方对接,调用非托管DLL,之前正常对接的程序,却总是报"内存已损坏的异常",程序进程直接死掉,折腾到这个点(2018-05-11 00:26),终于尘埃落定,直接 ...
- SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 -
SAP 操作,弹出报错 - 已根据规则拒绝服务器触发的操作,是否要查看上个通讯步骤中触发的操作列表 - 收到用户报错说,他执行MIR7做预制发票的时候,SAP弹出如下框框: 登陆SAP,左键单击如下图 ...
- 图形界面报错“已拒绝X11转移申请”的解决方法
图形界面报错"已拒绝X11转移申请"的解决方法 参考文章: (1)图形界面报错"已拒绝X11转移申请"的解决方法 (2)https://www.cnblogs. ...
最新文章
- [j2me]手机也可以玩播客(Podcast)! Geek开发说明[开源]
- C语言图像处理二值图细化,Visual C 实现二值图像处理
- SQL性能第2篇:查询分析和访问路径制定
- C++ 变量和常量
- 计算机教学的弊端,信息技术在教学中的利弊及解决对策
- 【vant】爬坑引用本地图片
- Android开发者要搬运多少年代码才能突破年薪40W?
- 【渲染管线】关于透明度混合blend
- 奇虎360 2015校园招聘笔试编程题
- 计算机社团感恩节免费维修周策划书,社团感恩节活动策划书范文 .docx
- 你还在使用JDK7,今天阿粉带你来了解一下JDK8,不得不说,真香!
- 行业短信应用的类型与短信模板
- Oracle海量数据清理-表空间释放
- 口语100的flash驱动
- HP-UNIX 系统日志 查询
- web前端CSS之“ calc() 函数”
- 【转】IE8与Visual Studio“打架
- 线段树学习心得 poj3468
- 【国君非银】TAMP研究之一:它的美国起源史
- 几个实用的软件开发工具之——代码编辑工具
热门文章
- 计算机报名登录老显示验证码错误是怎么回事,为何登录博客时输入了正确的验证码却总提示验证码错误?...
- 医院计算机管理工资,医院绩效管理平台:绩效工资管理系统
- mysql order by 排序技巧
- 绘制地图其实并不难!如何绘制地图?看看Smartbi的制作方法
- 【游戏设计模式】之一 序言:架构,性能与游戏
- 免费可商用图片网站整理
- Javakeytool生成RSA密钥
- 垃圾分类数据集(垃圾图片数据集)
- 教你如何将 优酷网等视频网站的视频外链时自动播放
- win7 计算机登录用户密码,Win7电脑无需知道密码绕过密码登录的操作方法?