背景:学习vs生成动态库一段时间以来,一直对动态库.dll 与.lib的关系,vs工程配置半知半解,直到最近有了更进一步的理解,若有错误,欢迎指正。 平台:windows
1.动态库.lib与.dll关系
我们知道,通过工程生成的动态库并不只有.dll文件,还有.lib文件。其他地方对这点的解释是.lib文件保存了函数信息以及其在dll中的位置。那么现在有一个问题,生成的.lib和.dll文件是否可以改名?
结论,.lib可以改,.dll不可以改。
为什么?
因为与.lib名字相关的只有工程配置中链接器的输入,如果lib文件名字改了,只需要把工程中对应的名字也改了,其他并没有什么影响。
但为什么dll名字不能改,我没有查看过lib文件内容,但是根据之前的介绍“lib存的是dll的函数信息以及其在dll的位置”,不难推理出lib一定是保存了dll文件的名字,且程序在运行时通过dll名字来找到对应的dll,再找到所调用的函数,那么如果dll名字改了,是不是就找不到dll呢。
2.visual studio工程库路径配置
新手刚开始配置,没有经验,只能照着网上的文章来配置,但是网上的很多文章往往少说了一些内容,这就很容易导致后续产生问题。
网上的大多教程为以下三步:
- 在 c/c++附加包含目录配置头文件路径
- 在链接器-附加库目录 配置lib文件路径
- 在输入-附加依赖项添加lib文件名
那么dll文件路径如何配置?
一般来讲,dll是与lib文件放在一起的,但如果只是执行上面三步,程序大概率不会运行。有人也许会疑问,我的dll与lib放在一起呀,怎么会找不到dll呢?
其实,dll文件与lib在不在一起无所谓,因为程序运行时,是在当前运行输出路径中(.exe所在路径)寻找dll文件,也就是说,配置dll路径就是
- 把dll文件复制到当前程序运行输出路径
- 或者把当前程序输出路径设置为dll所在路径
既然dll不能随便改名字,那么有人问我就想改怎么办?
这需要重新编译生成库文件。
以上。
|