我的项目里面用了boost和ffmpeg库,分开用没有什么问题,但两个一起用就报错,都是一些 定义int64_t 等等的数据出错,如
ffmpeg\libavutil\rational.h(42) : error C2872: 'int64_t' : 模稜兩可的符號
ffmpeg\libavutil\intfloat_readwrite.h(7) : error C2872: 'int32_t' : 模稜兩可的符號
.......................出错都是这些问题,请问怎样避免出现这个问题,我只用ffmpeg或者只用boost库都不会发生问题,两个一起用就出现了问题了,怎样解决,谢谢!

解决方案 »

  1.   

    另添加一个cpp文件,把使用其中一个库的代码都移到该cpp文件中,做成函数形式来调用。
      

  2.   

    cnzdgs 怎样做成cpp,用函数形式调用? 这样做也要包含头文件,然后也要包含其中另外一个库的头文件,因此也会出错,你是怎样做的呢?
      

  3.   

    如果两个库中任何一个定义了自己的命名空间,就显式使用命名空间修饰符来界定类型,比如 boost::int64_t i64 = 0;如果两个库定义的类型都是全局的(都没有定义命名空间),那么可以自己加上命名空间约束,例如:namespace boost
    {
      #include "boost.h" // 强制把boost.h中定义的所有符号都归入 boost 命名空间
    };namespace ffmpeg
    {
      #include "ffmpeg.h" // 强制把ffmpeg.h中定义的所有符号都归入 ffmpeg 命名空间
    };// 现在使用各自的类型来定义变量
    boost::int64_t i = 0;
    ffmpeg::int64_t j = 1;
      

  4.   

    把其中一库分开作一个dll项目,另外导出lib和dll,原项目引用dll项目的头文件
      

  5.   

    改一个地方的代码,ffmpeg是完全开源的,可以改一下试试看
      

  6.   

    而者都定义了'int64_t' ,'int32_t'
    也许可以定位到该类型定义,尝试修改某个库的该类型定义,或者在头文件中添加条件编译.
      

  7.   

    把问题先简化一下,假设目前程序是在Test.cpp中要调用库A的a函数和库B的b函数:
    #include "A.h"
    #include "B.h"
    void Test()
    {
    a();
    b();
    }可以改成:
    添加bb.cpp和bb.h两个文件,
    在bb.h中:
    void cb();
    在bb.cpp中:
    #include "B.h"
    void cb()
    {
    b();
    }将Test.cpp改为:
    #include "A.h"
    #include "bb.h"
    void Test()
    {
    a();
    cb();
    }
      

  8.   

    可能是我没说明白,再解释一遍。
    假设你使用第三方库时需要包含它的某个/某些头文件(我假设是boost.h),那么只需要在#include语句的外面包裹一层命名空间定义(这就是强制约束),再使用它的任何类型符号都可以加上修饰符,可立即避免所有的符号冲突错误。
      

  9.   

    重复定义的地方,加上#ifdef吧
      

  10.   

    查一下两个库的源码,估计都有对_int64的定义