社区
C语言
帖子详情
怎么才能解决两个不同的库文件中有相同的名称函数链接冲突的问题
先原谅自己
2007-09-12 06:50:07
问题是这样的,由别人提供的两个库文件(无法获得源码)实现类似但不同的功能,现在想把它们都加入到程序中来。他们有些函数是重名的,现在还想调用不同库中的函数名称相同的函数实现不同的功能,这样可能么?
我搜了一下有人说namespace的东西,我没看太懂怎么回事,但似乎是行不通,我们用的是c语言也拿不到源代码。
...全文
9428
19
打赏
收藏
怎么才能解决两个不同的库文件中有相同的名称函数链接冲突的问题
问题是这样的,由别人提供的两个库文件(无法获得源码)实现类似但不同的功能,现在想把它们都加入到程序中来。他们有些函数是重名的,现在还想调用不同库中的函数名称相同的函数实现不同的功能,这样可能么? 我搜了一下有人说namespace的东西,我没看太懂怎么回事,但似乎是行不通,我们用的是c语言也拿不到源代码。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lyhtjg
2007-09-22
打赏
举报
回复
动态加载应该能解决这个问题把,当然重新包个库一个可以
_石头_
2007-09-22
打赏
举报
回复
2
把与两个库相关的头文件改一下,分别针对两个库中同名的函数增加一个宏(也可以定义一个带参数的宏,其参数就是一个指向函数的指针),然后再自己的程序里,采用定义后的宏来调用相应的函数.
ivy1023
2007-09-22
打赏
举报
回复
从如下角度考虑:
1.如果库是别人的,而且有名字空间,那是最好,直接用名字空间加要调用的函数名:
如 ivy::my_function();
其中ivy是名字空间的名字。
2.考虑动态库的显示加载:
可以查这几个库函数:
HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName // address of filename of executable module
);
FARPROC GetProcAddress(
HMODULE hModule, // handle to DLL module
LPCSTR lpProcName // name of function
);
其中第二个函数的第一个参数就是第一个函数的返回值。
SammyLan
2007-09-22
打赏
举报
回复
假设你那两个库是C.lib和CPP.lib,假设C.lib和CPP.lib中有N个同名的符号,解决方法如下
1.对于有冲突的N 个符号:新建一个CProxy和CPPProxy DLL项目,前者重新重新包装C.lib中的那N个函数(如函数名后加_c后缀),后者重新包装CPP.lib中的那N个函数(如函数名后加_cpp后缀).项目中如果用到对应的符号,就要加载对应的Proxy lib,同时加载也没关系
2.对于没有冲突的符号,可以在项目中直接使用(对于没有用到的符号,即使有冲突,只要不连接到这些符号,应该是没问题的,我不敢确定,楼主可以试一下)
仅供参考
cceczjxy
2007-09-22
打赏
举报
回复
动态加载,还个函数名就可以了
珍惜生命远离CPP
2007-09-21
打赏
举报
回复
要用动态库
b.c + d.c >>W.dll
c.c + e.c >>X.dll
这样就好了
extern int fun1_fromeB(void);
extern int fun1_fromeC(void);
//main.c
int main(void)
{
printf("fun1_fromeC:%d\n",fun1_fromeC());
printf("fun1_fromeB:%d\n",fun1_fromeB());
return 1;
}
先原谅自己
2007-09-21
打赏
举报
回复
iu_81(黄云万里动风色,白波九道流雪山。)
把他们的库自己在封装成两个库,区别开名字既可
akirya(坏[其实偶不是什么所谓的坏人]) (
重新包装一个库,将相应的函数名字改变一下.
我在vc下试了一下
//b.c
int fun1(void)
{
printf("b.c\n");
return 1;
}
//c.c
int fun1(void)
{
printf("b.c\n");
return 1;
}
//d.c
extern int fun1(void);
int fun1_fromeB(void)
{
return fun1();
}
//e.c
extern int fun1(void);
int fun1_fromeC(void)
{
return fun1();
}
b.c + d.c >>w.lib
c.c + e.c >>w.lib
extern int fun1_fromeB(void);
extern int fun1_fromeC(void);
//main.c
int main(void)
{
printf("fun1_fromeC:%d\n",fun1_fromeC());
printf("fun1_fromeB:%d\n",fun1_fromeB());
return 1;
}
我得到的结果达不到目的且很随机。需要在生成库是加入什么特殊的选项么?我还在尝试
我是苦力
2007-09-17
打赏
举报
回复
这个帖子,牛人多,学习了
whw123456
2007-09-17
打赏
举报
回复
学习··
WinWing
2007-09-15
打赏
举报
回复
只能是自己重新封装一下了
或者直接修改库文件,不过貌似比较麻烦 :-)
ckt
2007-09-15
打赏
举报
回复
自己修改下库吧,
如果每次调用一个函数都要去获得一个地址,
对于少量函数调用还好。
如果库中有很多个函数,不是显得太繁琐了。
atlcat
2007-09-15
打赏
举报
回复
建议不要在编译的时候加入库,不管是在环境变量设置中引入.lib还是import .lib
我会使用函数指针来加载并执行库函数
typedef (*FUN)(...);//你的函数格式
FUN funProc;
HMODLE hDll=NULL;
char *DLL1Path=DLL1的路径;
char *DLL2Path=DLL2的路径;
if(需要使用DLL1)
hDll=LoadLibary(DLL1Path);
else
hDll=LoadLibary(DLL2Path);
if(hDll)
funProc=GetFunctionProc(函数名);//抱歉,这个GetFunctionProc函数忘了怎么拼写了,手头没有装开发环境,你查一下msdn
然后执行funProc就可以了
lddLinan
2007-09-15
打赏
举报
回复
封装库采用静态连接是没用的,由方法可以把外部连接强制转化为内部连接么?
expter
2007-09-12
打赏
举报
回复
up
wotur
2007-09-12
打赏
举报
回复
akirya(坏[其实偶不是什么所谓的坏人]) ( ) 高,
受教了
iu_81
2007-09-12
打赏
举报
回复
把他们的库自己在封装成两个库,区别开名字既可
lddLinan
2007-09-12
打赏
举报
回复
写三个程序,一个主程序调度其它两个,另外两个程序分别使用两个库,主程序开始后开启两个线程调度其它两个程序...有点小题大做了,还是dll比较方便一些。
把那两个库的作者托出去打
珍惜生命远离CPP
2007-09-12
打赏
举报
回复
重新包装一个库,将相应的函数名字改变一下.
Yofoo
2007-09-12
打赏
举报
回复
别人提供的两个库文件 如果有相同的符号名, 用Lib编译肯定是通不过的,
使用动态加载dll方式, getprocaddress 可以解决这个问题
解决
c语言
两个
库
函数
库
冲突
可以采用dlopen方式,打开指定
库
,然后引用其中的
函数
指针
解决
函数
名
冲突
问题
(dlopen,dlsym,dlclose)
最近在4M布控球上集成城管算法的时候有遇到一个
问题
,如图1所示,多个算法同时提供同名
函数
但是具体实现却
不同
的情况,那么有个
问题
,当我们调用的时候怎么确认调用的是某个静态
库
中的
函数
?其实,当我们
链接
所有的...
动态
库
同名
函数
问题
万事皆有缘由,还是先从我遇到的这个
问题
说起~~~问:有一个主执行程序main,其中实现了
函数
foo(),同时调用动态
库
liba.so中的
函数
bar(),而动态
库
liba.so中也实现了foo()
函数
,那么在执行的时候如果在bar()中调用...
警惕C/C++同名
函数
冲突
想象这样一个情景,一个大项目,由
两个
彼此并不熟悉的企业合作完成。最后的交付软件是一个exe以及
两个
dll。
两个
企业各自负责一个dll。巧合的是,
两个
企业开发时,都依赖同一个第三方
库
,比如说,是opencv。但是,...
多个c/c++动态
库
函数
同名
冲突
解决
方法
最近某个程序需要调用多个动态
库
,但是
不同
的动态
库
中使用了功能
不同
的同名
函数
,导致调用出现偏差,为此做了些面向搜索引擎的编程工作(俗名百度google一下)。。。 样例 假设有动态
库
libFuncA.so和libFuncB.so,...
C语言
70,006
社区成员
243,255
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章