+ -
当前位置:首页 → 问答吧 → 我在动态库中包含了一个静态库,请问有办法在动态库中导出静态库中的函数吗?

我在动态库中包含了一个静态库,请问有办法在动态库中导出静态库中的函数吗?

时间:2010-01-20

来源:互联网

如题!
我现在的办法是在动态库中将静态库的函数重新封装一下导出,但这样外面使用时,只能通过我导出的函数调用静态库的函数,(也就是函数名不一样了),怎样可以直接导出,让外界调用时还是用静态库中的函数名字?不知道说清楚了没有!呵呵

作者: scaleqiao   发布时间: 2010-01-20

好象库摸版项目生成有带的了。

作者: flyerwing   发布时间: 2010-01-20

举个例子直观的说吧,静态库StaticLib.lib中有一个int Adder(int a,int b)函数。动态库DynamicDll.dll中加载了StaticLib.lib库,主程序main.exe中只加载DynamicDll.dll,我想在主程序使用函数名Adder调用静态库中的那个函数,在动态库中怎样将它导出呢?
我使用extern "C" __declspec(dllexport)int Adder(int a,int b);
会出错MyAdder' : redefinition; different linkage
怎么办呢?

作者: scaleqiao   发布时间: 2010-01-20

同名的话,在dll中会冲突

作者: jixingzhong   发布时间: 2010-01-20

引用 3 楼 jixingzhong 的回复:
同名的话,在dll中会冲突


对就是冲突了,有没有什么办法?

作者: scaleqiao   发布时间: 2010-01-20

顶!楼主解决没?我现在遇到了另一问题,假设两个DLL库,a.dll b.dll,它们均链接了静态库文件c.lib,为节省空间和内存,现在做一个c.dll,里面包含a 和 b的静态库 a.lib b.lib及c.lib,这样可以达到目的么?使a.lib和b.lib共用同一个静态库c.lib,也就是说只链接一次?

作者: twlkhl   发布时间: 2011-12-07

顶!楼主解决没?我现在遇到了另一问题,假设两个DLL库,a.dll b.dll,它们均链接了静态库文件c.lib,为节省空间和内存,现在做一个x.dll,里面包含a 和 b的静态库 a.lib b.lib及c.lib,这样可以达到目的么?就是能使a.lib和b.lib共用同一个静态库c.lib么?也就是说只链接一次?

作者: twlkhl   发布时间: 2011-12-07

顶!楼主解决没?我现在遇到了另一问题,假设两个DLL库,a.dll b.dll,它们均链接了静态库文件c.lib,为节省空间和内存,现在做一个x.dll,里面包含a 和 b的静态库 a.lib b.lib及c.lib,这样可以达到目的么?也就是说能使a.lib和b.lib共用同一个静态库c.lib么?可以达到c.lib只被链接一次的目的么?如果可以的话,怎样实现的呢?我感觉c.lib被x.dll静态链接了?那x.dll里面的a.lib和b.lib怎样使用到c.lib的呢?想不通。。。。

作者: twlkhl   发布时间: 2011-12-07

据我个人经验来说,这是无法解决的,我曾经用VTK和QT的静态库尝试全局连接,结果到处是redefination,最后直接跟VTK的开发人员交流,他们说这类问题没法解决,建议我全部用动态的,后来我想出了个无奈地方法,就是手动把VTK中包含冲突的文件全部替换成QT的,最后重新编译生成static lib ,最后问题解决。

作者: LinuxTiger   发布时间: 2011-12-07