在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)

最近使用Boost库作多线程开发,可视在vs中编译工程师老是遇到Macro redefinition错误,相似下面的错误描述html

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并且状态是已经修复,参考下面的连接mongodb

Ticket #4182

下面回复说是须要在config文件中定义“BOOST_HAS_STDINT_H”这个宏就能解决问题,但是我实验了半天没有任何效果,而后看修复Changeset 62082,发现修改的是下面这个文件shell

boost/config/compiler/visualc.hpp

而后我检查本身使用的这个文件,发现已是修复过的,但是为何还有错误呢,因而我尝试注释掉多线程

#  define BOOST_HAS_STDINT_H

而后从新编译,发现问题果真解决了,svn

因此最后解决方法是:google

修改vc编译器配置文件“boost/config/compiler/visualc.hpp”,注释掉“BOOST_HAS_STDINT_H”宏定义,能够解决问题命令行

#if _MSC_VER >= 1600
//#  define BOOST_HAS_STDINT_H
#endif

或者也能够把这几行彻底注释掉线程

 

这样修改的原理推测:应该是微软的vc编译器的相关文件也一样处理过该问题,致使双方同时修改宏定义,进而致使至关于宏定义依然没有修改,文件重复包含。htm

 

2014-6-19更新:注意,若是使用命令行编译其余程序须要使用boost库的状况(例如编译mongodb cxx driver),有可能须要一些类型例如int64_t,这个时候则须要改宏定义,不能修改,不然会出现编译错误。ip

相关文章
相关标签/搜索