zoukankan      html  css  js  c++  java
  • 转载

    原文链接:

    我们知道lib文件存在两种情况:

    (1)动态链接 库dynamic link library
      LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接 库dynamic link library。

      虽然lib导入库不是很重要,但是为了方便使用dll,lib导入库还是很常用。但是没有lib导入库,也是可以使用dll的。所以说,lib导入库是一个附加的增值产品。
         dll是用来动态链接的,也就是程序运行时才链接的。静态链接就是在生成exe时就链接到exe里了。链接最终的目的是要将dll载入到和exe同一个进程空间中。尽管这里是动态链接,它只是在链接的时间上延迟罢了。静态链接时,直接在生成时将库的内容放在了exe中,当exe文件加载到内存时,链接的库的内容也加载到内存了。动态链接库dll则是在生成exe的时候只用了一个占位表,叫做重定位表。然后在exe需要的时候,再将dll加载到exe所在的进程的内存空间中。
       所以说,不管是静态链接还是动态链接,最终都是要到exe的进程内存空间中的,是跑不了的。躲得了初一躲不了十五,dll只是延迟加载到内存罢了。
       我们要使用dll,为了方便知道dll中的所有函数都在什么位置,就用上了lib导入库。这个导入库记录了dll中的所有函数在dll中的位置,那么我们引入了lib导入库之后,在运行的时候,在加载了dll后,就可以方便的定位需要的函数了。有了这个lib导入库,我们不需要手动的去找dll中的函数了。使用dll就和静态lib库或者和直接的源码中写的函数一样简单。
       另一种就不用lib导入库了,使用API函数LoadLibrary来加载dll到内存中,然后使用API函数GetProcAddress来找到dll中的函数地址。这里的使用,将在dll的专题中讲解,就不多述了。

    (2)静态链接库static link library
      LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。


    如果是第一种,那么必须再配套有dll才能正确运行。
    所以,下载了一个lib,如何判断该lib文件是静态库还是动态库的导入文件呢?
    这里使用VS自带的lib.exe来查看:
    1、找到:安装目录/VC/bin/lib.exe:
    双击运行一下,如果弹出提示:缺少mspdb100.dll,那么就到:安装目录/Common7/IDE/mspdb100.dll,将其拷贝到安装目录/VC/bin文件夹下;双击后,会一闪即逝。
    2、使用dos环境打开lib.exe:
    找到开始菜单中的”运行“,输入cmd,回车,将lib.exe文件直接拖到dos环境中,回车。
    使用dos环境
    将lib.exe文件直接拖到dos环境中,会显示出路径
    3、可以看到有好几个选项,查看lib文件的为:/LIST[:文件名]:
    注意查看命令为:/list
    查看命令为/list
    4、查看lib文件:
    重新一次前面的操作:将lib.exe拖入,空格,输入:/list,空格,拖入需要查看的lib文件,回车。

    5、后缀显示为:.dll的,则lib文件为动态库的导入文件;.obj的,则lib文件为静态库。
    我这个是动态库的导入文件

  • 相关阅读:
    C语言文件路径中的”/“和““
    C语言对文件的操作函数用法详解2
    C语言对文件的操作函数用法详解1
    error MSB8031
    C#操作文件
    C#串口编程
    使用打印方法时,要先引用命名空间: Using System.Drawing.Pringing
    C# 使用printDocument1.Print打印时不显示 正在打印对话框(里面还有一个讨厌的取消按钮)
    在C#里面获得应用程序的当前路径
    Android中的WebView进行直接加载网页(要注意解决权限问题)
  • 原文地址:https://www.cnblogs.com/stonemjl/p/13722863.html
Copyright © 2011-2022 走看看