Linux静态库调用问题

我现在有两个静态库每个静态库里面只有1个函数,而且函数的接口是一样的但实现不一样,代码分别如下:a.cpp:#include"a.h"#include<iostream>... 我现在有两个静态库 每个静态库里面只有1个函数,而且函数的接口是一样的 但实现不一样,代码分别如下:
a.cpp :

#include "a.h"
#include <iostream>

int xglupt()
{
std::cout < < "this is a haha" < < std::endl;
return 0;
}

b.cpp :

int xglupt()
{
std::cout < < "this is b hahaha" < < std::endl;
return 0;
}

然后我又创建了两个动态库,每个动态库连接一个静态库,每个动态库也只有一个函数,在这个函数里面会调用静态库里面的函数 代码分别如下:
c.cpp :

#include "a.h"
#include "c.h"

int cfunc()
{
return xglupt();
}

d.cpp :

#include "a.h"
#include "c.h"

int cfund()
{
return xglupt();
}

然后我又创建了一个可执行程序,这个可执行程序调用两个动态库的函数 代码如下:
e.cpp :

#include "d.h"

int main (int argc, char**argv)
{
cfunc();
dfunc();

return 0;
}

我期望的结果:
this is a haha
this is b hahaha

可实际结果根据连接时两个动态库的先后顺序分别是:
this is a haha
this is a haha

和:
this is b hahaha
this is b hahaha

就是说先加载的哪个动态库就会使用那个动态库链接的静态库中的函数。请问这个问题如何解决,如何才能得到我想要的结果? 谢谢大家了!
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
一丝吻
2009-11-18
知道答主
回答量:49
采纳率:22%
帮助的人:16.9万
展开全部
你的两个so里面有相同的符号xglupt,当然是系统先加载哪个so就用那个so里面的xglupt的实现了。
解决的办法是要么改变接口的名字或者不改变名字但加上不同的参数(改变signature)让有所区分,要么加上class让他们有不同的name space
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式