两个静态lib有同名函数引用问题

慧眼识狗熊 2014-01-23 09:10:56
现在有2个静态Lib,A和B,都有函数Fun(),但是功能不一样。这是第三方提供的,我无法改。

但是现在我要在一个工程里用这2个Fun, 都用#pragma comment(lib,“”)静态引入,这样肯定引起函数重定义。

我的方案是再新建2个Lib工程C和D,分别导入lib A和B。

C中重命名函数FunA(){Fun();}
D中重命名函数FunB(){Fun();}

但事实证明也是不行的,lib只是编译,真正运行时最初的AB还是引用进来了,还是重定义。

求解决方案,现在只有静态lib,没有dll,项目中也用静态引用,不想用dll。
...全文
1377 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
glutton 2014-01-24
  • 打赏
  • 举报
回复
引用 22 楼 zhao4zhong1 的回复:
用UE直接修改.h和.lib中的函数名,注意保持长度不变即可。
牛掰
慧眼识狗熊 2014-01-24
  • 打赏
  • 举报
回复
引用 24 楼 derekrose 的回复:
把一个lib改成dll。。。 这样编译就好了
当时就是不想改dll,想都静态引用。
慧眼识狗熊 2014-01-24
  • 打赏
  • 举报
回复
找开发商改名称了。结贴。
赵4老师 2014-01-23
  • 打赏
  • 举报
回复
用UE直接修改.h和.lib中的函数名,注意保持长度不变即可。
慧眼识狗熊 2014-01-23
  • 打赏
  • 举报
回复
引用 19 楼 Automation_dmu 的回复:
有问题,找供应商啊
在找啊,这不还没回应么,我就也想想办法。
黑泡泡选手 2014-01-23
  • 打赏
  • 举报
回复
对,楼上说得对,得让人家改一下!
AndyStevens 2014-01-23
  • 打赏
  • 举报
回复
有问题,找供应商啊
谁学逆向工程 2014-01-23
  • 打赏
  • 举报
回复
引用 17 楼 small21 的回复:
...我的项目引入A,另外写一个exe引用B,要调用B的时候调用exe。 项目中不太可能用这种方法的。
虽然方法被你否决了,但你似乎理解了我的意思
慧眼识狗熊 2014-01-23
  • 打赏
  • 举报
回复
引用 16 楼 xiaoyuanyuan2009 的回复:
引用 15 楼 small21 的回复:
另一个进程要写啊,比dll封装还麻烦点,不过确实也可以。
你还没明白我的意思?
...我的项目引入A,另外写一个exe引用B,要调用B的时候调用exe。 项目中不太可能用这种方法的。
谁学逆向工程 2014-01-23
  • 打赏
  • 举报
回复
引用 15 楼 small21 的回复:
另一个进程要写啊,比dll封装还麻烦点,不过确实也可以。
你还没明白我的意思?
慧眼识狗熊 2014-01-23
  • 打赏
  • 举报
回复
引用 14 楼 xiaoyuanyuan2009 的回复:
[quote=引用 11 楼 small21 的回复:] 我就一个项目要引用这2个lib,难道我没理解你说的? 而且看着都累啊,别说写了。
思路和代码确实麻烦点,你也确实没理解我的意思。我的意思是说,你在你的进程中调用另一个进程,让“另一个”进程去执行这个函数,这样就不冲突了[/quote] 另一个进程要写啊,比dll封装还麻烦点,不过确实也可以。
谁学逆向工程 2014-01-23
  • 打赏
  • 举报
回复
引用 11 楼 small21 的回复:
我就一个项目要引用这2个lib,难道我没理解你说的? 而且看着都累啊,别说写了。
思路和代码确实麻烦点,你也确实没理解我的意思。我的意思是说,你在你的进程中调用另一个进程,让“另一个”进程去执行这个函数,这样就不冲突了
慧眼识狗熊 2014-01-23
  • 打赏
  • 举报
回复
引用 12 楼 lianshaohua 的回复:
给两个函数加上前缀
WINAPI?
ztenv 版主 2014-01-23
  • 打赏
  • 举报
回复
给两个函数加上前缀
慧眼识狗熊 2014-01-23
  • 打赏
  • 举报
回复
我就一个项目要引用这2个lib,难道我没理解你说的? 而且看着都累啊,别说写了。
引用 10 楼 xiaoyuanyuan2009 的回复:
还得多东西吗?我的意思是把两个Lib连接到两个进程中去
谁学逆向工程 2014-01-23
  • 打赏
  • 举报
回复
还得多东西吗?我的意思是把两个Lib连接到两个进程中去
慧眼识狗熊 2014-01-23
  • 打赏
  • 举报
回复
引用 7 楼 xiaoyuanyuan2009 的回复:
推荐一个比较累的办法,你另外在创建一个项目,在后来的项目中使用某一个函数。向他传递参数就用新项目的WinMain传递,返回值就读写文件吧。
这样还是得多东西出来,我就是想静态链接最后只有一个东西。
慧眼识狗熊 2014-01-23
  • 打赏
  • 举报
回复
引用 6 楼 zhuobattle 的回复:
[quote=引用 4 楼 small21 的回复:] [quote=引用 2 楼 Worcy_kiddy 的回复:] 把他们分离开,再封一层静态库~两个相同名称的函数应该有不同的命名域才对!
我也这么想的,可是不知道为什么不行。蛋疼的。[/quote] 静态库只是obj文件的集合,你还是写两个dll封装下吧,然后用隐式调用dll导出函数,用起来也方便的。[/quote] 就是不想用dll啊,发布出去dll太多了。
谁学逆向工程 2014-01-23
  • 打赏
  • 举报
回复
推荐一个比较累的办法,你另外在创建一个项目,在后来的项目中使用某一个函数。向他传递参数就用新项目的WinMain传递,返回值就读写文件吧。
zhuobattle 2014-01-23
  • 打赏
  • 举报
回复
引用 4 楼 small21 的回复:
[quote=引用 2 楼 Worcy_kiddy 的回复:] 把他们分离开,再封一层静态库~两个相同名称的函数应该有不同的命名域才对!
我也这么想的,可是不知道为什么不行。蛋疼的。[/quote] 静态库只是obj文件的集合,你还是写两个dll封装下吧,然后用隐式调用dll导出函数,用起来也方便的。
加载更多回复(9)

64,646

社区成员

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

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