关于链接时区分依赖库的版本

_lee_chong 2015-08-20 05:57:36
我有一个静态库的项目,是sdk;依赖于一个系统库,但是系统库同一个功能有两个版本,
版本一:

// demo.h
namespace nameP
{
class CC_Demo
{
public:
static CC_Demo* createDemo();
static void Pro();
}
}

版本二:

// demo.h
namespace nameP
{
class Demo
{
public:
static Demo* getDemo();
static void Pro();
}
}


因为我的静态库是sdk,需要编译好以后给别人用,所以没法用预编译的方式来处理,而且我也不想,编译两个版本的静态库给别人,但是因为是静态库,所以我想有没有办法在链接的时候来区分版本;
我现在是这样:

if (nameP::CC_Demo::createDemo) {
nameP::CC_Demo::createDemo().Pro();
}
if (nameP::Demo::getDemo) {
nameP::Demo::getDemo().Pro();
}

编译时自然ok,但是在测试的项目中,肯定只会链接其中一个版本的系统库,结果就会在链接的时候报找不到另一个版本的函数符号。。。
哪位说一下怎么处理好么
...全文
101 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
_lee_chong 2015-08-21
  • 打赏
  • 举报
回复
引用 4 楼 Saleayas 的回复:
如果你的 库,明确需要一个版本的依赖项。那么使用者必须链接你指定的版本。 如果你的库,可以支持任意一个版本,那么,这个依赖项版本将有使用者指定的。
是啊,要支持任意版本。。。 我也知道俩版本的区别,也有头文件,但是就是不知道代码怎么去写才能链接通过了。。
Saleayas 2015-08-21
  • 打赏
  • 举报
回复
如果你的 库,明确需要一个版本的依赖项。那么使用者必须链接你指定的版本。 如果你的库,可以支持任意一个版本,那么,这个依赖项版本将有使用者指定的。
_lee_chong 2015-08-21
  • 打赏
  • 举报
回复
引用 2 楼 dustpg 的回复:
只会“链接”1个,

if (nameP::CC_Demo::createDemo) {
    nameP::CC_Demo::createDemo().Pro();
}
if (nameP::Demo::getDemo) {
	nameP::Demo::getDemo().Pro();
}
这个是运行时判断, 你需要一个编译时/链接时判断, 自然不行, 目测只靠C++原生的话只能用宏定义
要是c函数的话可以用动态加载库的方式,但是c++的类,能用动态加载的方式怎么用么
dustpg 2015-08-20
  • 打赏
  • 举报
回复
只会“链接”1个,

if (nameP::CC_Demo::createDemo) {
    nameP::CC_Demo::createDemo().Pro();
}
if (nameP::Demo::getDemo) {
	nameP::Demo::getDemo().Pro();
}
这个是运行时判断, 你需要一个编译时/链接时判断, 自然不行, 目测只靠C++原生的话只能用宏定义
bsnry 2015-08-20
  • 打赏
  • 举报
回复
感觉怪怪的。

64,282

社区成员

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

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