静态链接库的问题。。。

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

我比较菜,虚心请教。谢谢。
...全文
281 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zys184 2005-10-07
  • 打赏
  • 举报
回复
楼上的解释的非常好,我差不多懂了。。

谢谢!!!
oyljerry 2005-10-06
  • 打赏
  • 举报
回复
静态链接库通过h和lib文件,直接链接到exe中
动态链接库,运行时动态装载
vcmute 2005-10-06
  • 打赏
  • 举报
回复
静态链接库是编译进去的,LoadLibrary的才是动态链接的
菜牛 2005-10-06
  • 打赏
  • 举报
回复
静态连接库就是把lib文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。

“每一个lib文件就是若干函数(假设只有函数)的定义”
lib库有两种,一种是包含了函数所在DLL文件和文件中函数位置的信息,称为导出库;一种是包含函数代码本身,一般现在有了DLL,用的是前一种库;以前在DOS下的TC/BC等,是后一种库。包含函数原型声明的,是头文件(.h)。

“通过#include 了包含这些函数声明的头文件后,我们的应用程序就可以使用lib文件中的函数”
还要指定编译器链接相应的库文件。在IDE环境下,一般是一次指定所有用到的库文件,编译器自己寻找每个模块需要的库;在命令行编译环境下,需要指定每个模块调用的库。

“那他和直接给出那个函数定义的文件,比如.cpp文件,和头文件有什么区别,静态链接库有什么用”
cpp文件是源代码,库文件是编译后的二进制代码,比如你可以调用Windows的API,但是不能看到其源代码一样。

“还有不明白的是,静态链接库中的lib文件只要用到,则整个lib文件的内容都放进了exe文件中,那它是被编译进去还是连接的时候连接进去的”
只有用到的部分,才在链接的时候链接到目标代码中。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧