静态库和动态库

本文介绍了如何在Windows和Linux平台上创建和使用静态库(.a/.lib)与动态库(.so/.lib/.dll),包括CMake在构建过程中的应用,以及静态库与动态库在加载时间、文件大小、运行速度和维护方面的区别。
摘要由CSDN通过智能技术生成

1. 简单介绍

    在给别人使用函数时,但是不想让别人看到函数具体实现的代码内容(不开源),

	就把这些源代码打包在一起,生成一个库文件
    
    在使用的时候就可以直接通过这个库文件和头文件来调用,不需要平台的环境

    本质上来说库是一种可执行代码的二进制形式,在不同平台也是不兼容的(Windows和Linux)

2. 静态库

Linux:
    后缀名: .a

Windows:
    后缀名:.lib

使用静态库时,只需要将静态库文件添加到项目中,

并在源代码中包含相应的头文件,就可以直接使用库中的函数了

但是需要注意:静态库只能连接到一个程序中

如果要在多个项目中都要使用,就需要将静态库文件分别添加到每个项目中

3. 动态库

Linux:
    后缀名: .so

Windows:
    后缀名:.lib和.dll

    使用动态库时,需要在编译的时候链接.lib文件,该文件包含了函数所在的.dll文件

	还有文件中函数位置的信息(索引),使得程序在运行时可以动态连接.dll文件,调用其中函数

    动态库(.dll)用于动态编译,将实现过程放到.dll文件中,这样该文件就可以提供给多个程序使用

4. 库的创建和调用(Windows + CMake)

静态库

创建

生成静态库:

add_library(库名 链接库类型(STATIC) 资源文件)

调用

  1. 静态库目录:

    link_directories(静态库的头文件目录)

  2. 具体连接的库名:

    link_libraries(MathFun.lib)

动态库

创建

生成动态库:

add_library(库名 链接库类型(SHARED) 资源文件)

调用

  1. 连接库到可执行文件:

    target_link_libraries(可执行文件名 库文件(.lib))

    执行应用程序时,需要与.dll文件放在一起,才能调用库的内容

5. 动态库和静态库区别(Windows)

1. 载入代码时刻不同:
静态库:
    编译时被载入,将整个静态库内容都拷贝到应用程序中
动态库:
    编译时仅拷贝.lib中的引导信息,方便执行的时候,找到.dll文件中的函数

2. 应用程序大小不一样:
静态库:
    编译将静态库内容拷贝过来,所以文件较大
动态库:
    编译时仅拷贝引导信息,所以文件较小

3. 运行速度不一样
静态库:
    直接运行应用程序就可以
动态库:
    运行的时候还需要去调用库,所以速度相对较慢

4. 库文件程序变更
静态库:
    需要重新编译,相对麻烦
动态库:
    不影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值