对于动态链接库和静态链接库的一些理解

以下内容只讨论win中的动态链接和静态链接。

首先,一个程序从编译的运行的全过程:

预编译->编译->汇编->链接

其中,到了汇编这一步生成.obj文件,也就是说,对于一个单独的.c文件,只要可以找到他的头文件,到了这一步都不会报错!

然后,这些汇编生成的obj文件,我们可以选择生成lib或lib+dll。 其中lib包含了所有需要的东西,包括代码,而lib+dll中,lib只包含dll中函数的入口,位置等等信息,真正的代码在dll里面。

使用静态链接:

在win上利用visual studio 构建时,如果我们用到了静态链接库,需要两个东西

1. .h文件:指定include directories, 包含了lib文件中函数的声明等等,

2. 指明lib文件的位置,即linker->General中的Additional Linker Directories, 指明包括lib文件的路径。然后再Input选项中,指明Additional Dependencies, 具体指明lib的名字。

结果:.h文件里面的内容被替换到载入了这个头文件的那些源文件里面,然后.lib文件在其他的源码生成了obj文件以后被链接进入可执行文件。此时.lib文件在可执行程序中已经不需要了,删掉也没有关系,因为已经被链接进去了,所以这时候的可执行文件会比较大。

使用动态链接

在win上利用visual studio构建程序,如果使用到了动态链接库, 我们需要做

1. 头文件。

2. 明lib文件的位置,即linker->General中的Additional Linker Directories, 指明包括lib文件的路径。然后再Input选项中,指明Additional Dependencies, 具体指明lib的名字。

3. 使得程序在运行时可以找到dll的位置,所以其实有两种方法,A:添加dll文件的路径到系统环境变量Path里面   B:将dll文件移动到系统默认的dll文件夹下。

其实这时候生成的可执行文件会小很多,因为dll文件并不在可执行文件中,而是在程序运行时动态载入的。但是这时候dll文件就不可以删除了,否则程序会找不到dll文件。真正被连接到可执行程序里面的仍然是头文件里面的内容和lib文件,但是这时候的lib文件不包括真正的函数代码了,只包括dll文件函数的入口!所以可执行文件会小。上面说的方法是隐式调用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值