多个第三方库头文件冲突怎么解决

千树之影 2017-05-16 11:15:30
一个工程里使用了两个第三方SDK,结果两个SDK的头文件结构类似,大致情况如下:
一个sdk:
sdk1/include/
|---x1.h //里面liclude "base/a.h"
|--base/
||---a.h
||---b.h
另一个sdk
sdk2/include/
|---x2.h //里面liclude "base/a.h"
|--base/
||----a.h
||-----b.h
||-----c.h

两个sdk里的a.h,b.h文件名相同,但内容不同
现在工程路径里添加了sdk1/include/和sdk2/include/
sdk1.cpp里include了x1.h,sdk2.cpp里include了x2.h,编译发现sdk2编译失败,因为它实际包含的是sdk1里面的a.h

虽然可以通过修改sdk2中的目录名或文件名来解决,但这就意味着需要修改sdk中头文件的内容,与sdk使用原则冲突。
不知道有没有知道更好的解决办法?
...全文
2144 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 版主 2017-05-18
  • 打赏
  • 举报
回复
来晚了,你们都好积极
赵4老师 2017-05-16
  • 打赏
  • 举报
回复
或者
namespace B {
#include "a.h"  //B
#include "b.h" //B
};
namespace A {
#include "a.h"  //A
#include "b.h" //A
};
?
xuhaoee 2017-05-16
  • 打赏
  • 举报
回复
有两个方法: 1. 分别将两个SDK上面再封装一层,然后来使用以一个SDK为例: 写一个.h 和一个.cpp,在.h中写上你所需要的所有接口,在.cpp中调用SDK去实现;在.h中不要include任何SDK中的头文件! 2. 比较简单的,拆分你的代码,代码1中只使用SDK1的东西,代码2中只使用SDK2的东西,由于是单独编译,可以解决这个问题!
千树之影 2017-05-16
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
A a.h→A_a.h A b.h→A_b.h B a.h→B_a.h B b.h→B_b.h
你是指修改头文件名吗?说过了这样的话sdk里的include代码都要改,但我不希望去修改sdk的代码,毕竟那是第三方的东西
赵4老师 2017-05-16
  • 打赏
  • 举报
回复
A a.h→A_a.h A b.h→A_b.h B a.h→B_a.h B b.h→B_b.h

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧