在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)
2014-06-09 16:42 愤怒的青蛙 阅读(10261) 评论(0) 编辑 收藏 举报最近使用Boost库做多线程开发,可视在vs中编译工程师总是遇到Macro redefinition错误,类似下面的错误描述
1 2 | 1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdint.h(116): warning C4005: 'INT8_C' : macro redefinition 1> c:\vc\include\boost\cstdint.hpp(376) : see previous definition of 'INT8_C' |
一开始没有管,可视后来这东西实在是拖慢编译速度,于是不能忍,果断google之,发现boost官方已经有人提交了该bug而且状态是已经修复,参考下面的链接
Ticket #4182
下面回复说是需要在config文件中定义“BOOST_HAS_STDINT_H”这个宏就能解决问题,可是我实验了半天没有任何效果,然后看修复Changeset 62082,发现修改的是下面这个文件
1 | boost/config/compiler/visualc.hpp |
然后我检查自己使用的这个文件,发现已经是修复过的,可是为什么还有错误呢,于是我尝试注释掉
1 | # define BOOST_HAS_STDINT_H |
然后重新编译,发现问题果然解决了,
所以最后解决方法是:
修改vc编译器配置文件“boost/config/compiler/visualc.hpp”,注释掉“BOOST_HAS_STDINT_H”宏定义,可以解决问题
1 2 3 | #if _MSC_VER >= 1600 //# define BOOST_HAS_STDINT_H #endif |
或者也可以把这几行完全注释掉
这样修改的原理推测:应该是微软的vc编译器的相关文件也同样处理过该问题,导致双方同时修改宏定义,进而导致相当于宏定义依然没有修改,文件重复包含。
2014-6-19更新:注意,如果使用命令行编译其他程序需要使用boost库的情况(例如编译mongodb cxx driver),有可能需要一些类型例如int64_t,这个时候则需要改宏定义,不能修改,否则会出现编译错误。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人