zoukankan      html  css  js  c++  java
  • 在VS中使用Boost库出现Macro redefinition错误的解决方法(warning C4005)

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

    1>c:program files (x86)microsoft visual studio 10.0vcincludestdint.h(116): warning C4005: 'INT8_C' : macro redefinition
    1>          c:vcincludeoostcstdint.hpp(376) : see previous definition of 'INT8_C'

    一开始没有管,可视后来这东西实在是拖慢编译速度,于是不能忍,果断google之,发现boost官方已经有人提交了该bug而且状态是已经修复,参考下面的链接

    Ticket #4182

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

    boost/config/compiler/visualc.hpp

    然后我检查自己使用的这个文件,发现已经是修复过的,可是为什么还有错误呢,于是我尝试注释掉

    #  define BOOST_HAS_STDINT_H

    然后重新编译,发现问题果然解决了,

    所以最后解决方法是:

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

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

    或者也可以把这几行完全注释掉

     

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

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

  • 相关阅读:
    noip的一些模板(参考了神牛的博客)
    NOIP算法总结与复习
    算是一份学习计划
    RMQ-ST算法的理解与实现(C++)
    SharePoint2010母版页想要的定制
    Memoization
    mutable and immutable
    Sqlite
    PyCharm Change Font Size
    Sublime Text添加gcc编译器
  • 原文地址:https://www.cnblogs.com/madhenry/p/3778203.html
Copyright © 2011-2022 走看看