c语言中不同静态库相同函数问题

luoliangfeng 2012-10-17 04:49:21
在使用两个第三方库,静态库,libd3p, libapp,
这两个库中有很多相同的名字的函数参数和返回值声明也是相同的,但是实现是不同.
例如,
有这样一个函数 void Opend3plotfile(char* name);
它并不是这两个静态库的接口,是在内部被调用.
这个函数,在libd3p, 和libapp中有不同的实现.

debug的问题:
当使用libd3p的接口时, 设
InitLib()
{
//调用到
Opend3plotfile();//本应该使用在libd3p内部的实现, 但是跟踪发现跑到libapp中的实现,引起crash
}

有没有什么办法解决这个问题? 这些代码是纯c的,貌似不能支持namespace.
另外这样的重复函数有上百个,有没有什么简洁的方案fix. 期待大牛,谢谢!!!!!
...全文
528 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
KuaiPengFei_ 2013-03-18
  • 打赏
  • 举报
回复
要不你试试这样自己封装一下你需要的函数啊:

/*头文件名:lib.h */
#ifndef LIB_H
#define LIB_H
extern "C" int __declspec(dllexport)add(int x, int y);
#endif
/* 实现文件名:lib.cpp */
#include "lib.h"
int add(int x, int y)
{
    return x + y;
}
编译成功后就生成了DLL库
KuaiPengFei_ 2013-03-18
  • 打赏
  • 举报
回复
你用动态加载的方式吧、在你的代码里面去加载、用函数的时候打开相应的库、用完在关闭.不仅节约空间还解决了你的问题 对否?
luoliangfeng 2013-03-18
  • 打赏
  • 举报
回复
自己动手写了个替代品.
Athenacle_ 2013-03-14
  • 打赏
  • 举报
回复
自己动手封装一层?
luoliangfeng 2013-03-14
  • 打赏
  • 举报
回复
干掉了一个lib,历史原因,两个lib之间的作者互相学习的产物.多谢大家回复.
AnYidan 2013-01-06
  • 打赏
  • 举报
回复
引用 8 楼 ForestDB 的回复:
LZ先普及下这两个库是干什么用的?有和关系?为啥这么像?还必须同时用?
++
kingstarer 2013-01-06
  • 打赏
  • 举报
回复
关注一下 静态链接库多了是比较麻烦
ForestDB 2013-01-06
  • 打赏
  • 举报
回复
LZ先普及下这两个库是干什么用的?有和关系?为啥这么像?还必须同时用?
zhcosin 2013-01-05
  • 打赏
  • 举报
回复
其实我的观点,既然两个库有上百个函数的接口都重复,说明你大可不必使用两个库,只用一个即可,如果你真的需要另一个库的部分功能,可能的话对自己使用的库进行类似改造即可。
zhcosin 2013-01-05
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
1、如果是用GCC的话,那么直接在makefile中去选择链接库即可; 2、如果是用VC的话,那么用#pragma comment来指定库的链接,例如: #ifdef LIBD3P #pragma comment(lib, "libd3p.lib") #else #pragma comment(lib, "libapp.lib") #endif ……
你都没搞明白别人的问题,别人是两个库都要同时链接。
turingo 2012-10-17
  • 打赏
  • 举报
回复
没看到我在2楼的回复吗?

[Quote=引用 3 楼 的回复:]

谢谢帮顶,觉得这因该是个常规问题.
不知道大家都怎么搞的?
弄个函数指针的struct,但这个代码改动量和改那些函数名不是差不多嘛.遂放弃.
试图用c++编译方式,可是那些纯c的代码会出现很多其他的编译错误,遂放弃.
期待简洁解决方案.
[/Quote]
luoliangfeng 2012-10-17
  • 打赏
  • 举报
回复
谢谢帮顶,觉得这因该是个常规问题.
不知道大家都怎么搞的?
弄个函数指针的struct,但这个代码改动量和改那些函数名不是差不多嘛.遂放弃.
试图用c++编译方式,可是那些纯c的代码会出现很多其他的编译错误,遂放弃.
期待简洁解决方案.
turingo 2012-10-17
  • 打赏
  • 举报
回复
1、如果是用GCC的话,那么直接在makefile中去选择链接库即可;
2、如果是用VC的话,那么用#pragma comment来指定库的链接,例如:
#ifdef LIBD3P
#pragma comment(lib, "libd3p.lib")
#else
#pragma comment(lib, "libapp.lib")
#endif
LCL_data 2012-10-17
  • 打赏
  • 举报
回复
mark 不会。等答案

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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