一个C++项目, 已有一些静态库(.lib)和所有的函数声明(.h),怎么生成一个动态库(dll)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个C++项目, 已有一些静态库(.lib)和所有的函数声明(.h),怎么生成一个动态库(dll)相关的知识,希望对你有一定的参考价值。

link /lib /list xxx.lib
可以列出这个lib文件里的所有obj文件

link /lib /extract:xxx.obj xxx.lib
可以从lib里拆解出一个obj文件

配合/nologo参数和for命令
把里面的obj文件全部拆出来
for /f "delims=" %a in ('link /lib /list /nologo xxx.lib') do link /lib /extract:"%a" xxx.lib

然后根据.h文件自己写个def文件,用link重新链接一下就行了。
def文件还是要自己写的……
或者你看看能不能用dumpbin把lib导出的函数名字都列出来,然后处理一下做成def文件
参考技术A 建一个dll工程,然后把.lib静态库加进去,将.lib静态库中所有的导出函数用另一个新函数封装一下,并把这些新函数导出.这样就形成一个新的有.lib静态库相同功能的dll了.追问

太麻烦了, 函数太多了。。。, 而且这样生成的函数调用时要寻址两次

追答

使用函数指针的全局变量,将这些变量赋值成lib静态库中的值,然后导出这些变量.

关于函数太多,那我也没其它方法.很显然,你必须得知道你要导出的函数列表才行.

参考技术B 你是指你得到的静态库做成动态库嘛
据我所知没办法
当你在用SDK时基本都会提供动态库与静态库
你必须要知道静态库源码才能去重新编译成动态库
参考技术C 动态链接库是要自己写代码的,你这个是别人的。lib文件啊~追问

我的意思就是把lib变成dll, 函数都是Lib里面的函数

以上是关于一个C++项目, 已有一些静态库(.lib)和所有的函数声明(.h),怎么生成一个动态库(dll)的主要内容,如果未能解决你的问题,请参考以下文章

使用 WinDDK 静态链接多个库

C++ 静态库中的共享全局变量

android项目中如何加载已有so库

C++中lib 和 dll 的区别,生成以及使用详解

C++ 如何加载lib

Visual Studio 2017 动态链接库(DLL /LIB) 静态链接库(LIB)的思考