静态链接库

2 篇文章 0 订阅

静态链接库

原文地址:静态链接库

静态链接库介绍

静态连接库就是把(lib)文件中用到的函数代码直接链接进目标程序,程序运行的时候不再需要其它的库文件;动态链接就是把调用的函数所在文件模块(DLL)和调用函数在文件中的位置等信息链接进目标程序,程序运行的时候再从DLL中寻找相应函数代码,因此需要相应DLL文件的支持。

静态链接库与动态链接库的区别

静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib 中的指令都全部被直接包含在最终生成的 EXE 文件中了。但是若使用 DLL,该 DLL 不必被包含在最终 EXE 文件中,EXE 文件执行时可以“动态”地引用和卸载这个与 EXE 独立的 DLL 文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。

lib库

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

静态lib与动态lib

lib有静态lib和动态lib之分。
  静态lib将导出声明和实现都放在lib中。编译后所有代码都嵌入到宿主程序。静态lib也即是静态链接库。
  动态lib相当于一个h文件,是对实现部分(.dll文件)的导出部分的声明。编译后只是将导出声明部分编译到宿主程序中,运行时候需要相应的dll文件支持。动态lib也就是相当于动态链接库采用隐式链接方式使用的时候用到的lib文件。

范例

范例1


//Dll4.h文件
int add(int x, int y);
//Dll4.cpp文件
#include "Dll4.h"
int add(int a, int b)
{
    return a + b;
}
//测试程序
#include <stdio.h>
#pragma comment(lib,"Dll4.lib")
#include "Dll4.h"
int _tmain(int argc, _TCHAR* argv[])
{
    printf("%d\n", add(5, 6));
    return 0;
}
//输出11

注意:要把Dll4.h文件和Dll4.lib文件放到测试程序代码目录下

范例2:在静态链接库中使用类


//Dll4.h
int add(int x, int y);
class Rectangle
{
public:
    int area;
    void calcArea(int x, int y);
};
//Dll4.cpp
#include "Dll4.h"
int add(int a, int b)
{
    return a + b;
}
void Rectangle::calcArea(int x, int y)
{
    area = x*y;
}
//测试程序
#include "stdafx.h"
#pragma comment(lib,"Dll4.lib")
#include "Dll4.h"
int _tmain(int argc, _TCHAR* argv[])
{
    printf("%d\n", add(5, 6));
    Rectangle rt;
    rt.calcArea(2, 2);
    printf("%d\n",rt.area );
    return 0;
}
//输出结果
11
4

这里我们可以看到,测试程序是可以访问在静态链接库中定义的访问方式为public 的属性的。
但是如果我们将area的访问方式改为private,那么测试程序将不能访问area

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值