我的项目里面用了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库都不会发生问题,两个一起用就出现了问题了,怎样解决,谢谢!
ffmpeg\libavutil\rational.h(42) : error C2872: 'int64_t' : 模稜兩可的符號
ffmpeg\libavutil\intfloat_readwrite.h(7) : error C2872: 'int32_t' : 模稜兩可的符號
.......................出错都是这些问题,请问怎样避免出现这个问题,我只用ffmpeg或者只用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;
也许可以定位到该类型定义,尝试修改某个库的该类型定义,或者在头文件中添加条件编译.
#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();
}
假设你使用第三方库时需要包含它的某个/某些头文件(我假设是boost.h),那么只需要在#include语句的外面包裹一层命名空间定义(这就是强制约束),再使用它的任何类型符号都可以加上修饰符,可立即避免所有的符号冲突错误。