刚开始学习动态链接库,所以理所当然要区分静态链接库和动态链接库,刚看了书,对于静态链接有些疑问:
      首先我谈谈我对静态链接库的理解,不知道正确不正确,静态链接库就是lib文件的集合,而每一个lib文件就是若干函数(假设只有函数)的定义,通过#include 了包含这些函数声明的头文件后,我们的应用程序就可以使用lib文件中的函数。那他和直接给出那个函数定义的文件,比如.cpp文件,和头文件有什么区别,静态链接库有什么用??
     还有不明白的是,静态链接库中的lib文件只要用到,则整个lib文件的内容都放进了exe文件中,那它是被编译进去还是连接的时候连接进去的??我比较菜,虚心请教。谢谢。

解决方案 »

  1.   

    静态链接库是编译进去的,LoadLibrary的才是动态链接的
      

  2.   

    静态链接库通过h和lib文件,直接链接到exe中
    动态链接库,运行时动态装载
      

  3.   

    静态连接库就是把lib文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。“每一个lib文件就是若干函数(假设只有函数)的定义”
    lib库有两种,一种是包含了函数所在DLL文件和文件中函数位置的信息,称为导出库;一种是包含函数代码本身,一般现在有了DLL,用的是前一种库;以前在DOS下的TC/BC等,是后一种库。包含函数原型声明的,是头文件(.h)。“通过#include 了包含这些函数声明的头文件后,我们的应用程序就可以使用lib文件中的函数”
    还要指定编译器链接相应的库文件。在IDE环境下,一般是一次指定所有用到的库文件,编译器自己寻找每个模块需要的库;在命令行编译环境下,需要指定每个模块调用的库。“那他和直接给出那个函数定义的文件,比如.cpp文件,和头文件有什么区别,静态链接库有什么用”
    cpp文件是源代码,库文件是编译后的二进制代码,比如你可以调用Windows的API,但是不能看到其源代码一样。“还有不明白的是,静态链接库中的lib文件只要用到,则整个lib文件的内容都放进了exe文件中,那它是被编译进去还是连接的时候连接进去的”
    只有用到的部分,才在链接的时候链接到目标代码中。