• 动态库.lib与.dll关系、visual studio工程库路径配置浅析



    背景:学习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不能随便改名字,可能有人问我就想改怎么办?

    这需要重新编译生成库文件。

    以上。

  • 相关阅读:
    督查督办管理系统在企业管理中起到的作用
    上午面了个腾讯拿 38K 出来的,让我见识到了基础的天花
    智慧酒店解决方案-最新全套文件
    人工神经网络的典型模型,人工神经网络模型定义
    JVM命令行监控工具
    【红队】ATT&CK - 自启动 - 注册表运行键、启动文件夹
    Nginx(五)
    linux部署kafka并集成springboot
    EtherCAT从站EEPROM组成信息详解(1):字0-7ESC寄存器配置区
    电网运行信息检索系统的设计与实现
  • 原文地址:https://blog.csdn.net/qq_42362891/article/details/127405325