DLL和LIB

DLL:动态链接库 = 运行时链接

  程序在内存中运行时遇到DLL对应的.h,则在内存中找有无该dll,找不到,则在Path/程序生成目录/vs指定的库目录下找改dll。找到后,程序与其链接。

  所以N个进程可以共用一个dll

LIB:静态链接库 = 链接时链接

  在程序链接阶段将lib里面的内容(一种lib是源码,一种lib是dll的地址)与目标模块链接,加入目标模块中,链接之后lib无用。

  也就是独立的.lib不会进入内存。

  只有N个程序可以共用一个lib(要在模块编译链接阶段就将lib的源码)

链接时,只链接静态链接库。

链接程序怎么确定程序是静态链接还是动态链接:

  有LIB = 用静态链接

  有dll = 运行时候再链接

例子:

  #include a.h

  aaa.b()//a里的类aaa的成员函数b

程序经历的过程:

  编译:

    词法分析:看aaa.b()在调用前有无声明或定义(a.h)

         -所以aaa.b()只有声明没有定义这个不会再编译时报错,编译通过

  链接:

    链接所有lib进程序

  装入运行:

    aaa.b():

      -搜索aaa.b()在的位置:搜索 进程源码 -> 搜索动态链接库dll(path -> 程序exe目录 -> 库包含目录下的dll)

      -调用aaa.b(),进入b()函数体

 

 

注意:函数调用是在运行时才进入调用的代码

函数调用分两种:

  1.调用的是DLL里的函数:

    在内存中找有无dll有该函数,找不到,则在Path/程序生成目录/vs指定的库目录下找改dll。找到后,程序与其链接。

  2.调用的是LIB里的函数:

    LIB在链接的时候一定要链接到,要不然(链接时)就会报错。----ERROR LINK

 

存在问题:为什么无LIB会引发LINK ERROR,而不是引发运行时ERROR?

posted @ 2015-10-10 01:15  shinymood  阅读(169)  评论(0编辑  收藏  举报