静态库和动态库 vs项目

本文详细介绍了C++中静态库和动态库的创建及应用。通过Visual Studio创建静态库(.lib)和动态库(.dll),包括静态链接与动态链接的过程,并展示了如何在项目中引用这些库。同时,解释了动态库的导出接口及其调用方式,包括隐式调用和动态调用。
摘要由CSDN通过智能技术生成

静态库和动态库简介

静态库和动态库的定义
从源文件生成可执行文件:预处理、编译、汇编和链接
为了方便复用,可将一些程序编译成库文件,需要时直接链接。库是一种可执行的二进制文件。

静态库(.a, .lib)

静态链接:在链接阶段,编译器将汇编成的目标文件与库文件一起链接打包到可执行文件中。

静态链接库的创建

visual studio
新建 win32项目(取名为testlib),选静态库静态库工程新建头文件
testlib.h
在这里插入图片描述

源文件
testlib.cpp
在这里插入图片描述编译生成
目录如下:

  • testlib
    • testlib
      • Debug
        • testlib.lib(为二进制文件不能独立运行)
      • testlib.cpp
      • testlib.h

如何应用
新建一个控制台CPP项目test
新建test.cpp

  • testlib
    • Debug

    • testlib (这里是testlib项目的工作目录)

      • Debug
        • testlib.lib(为二进制文件不能独立运行)
      • testlib.cpp
      • testlib.h
    • test (这里是test项目的工作目录)

      • Debug
      • test.cpp

在test.cpp文件中引用 testlib.h

#include "../testlib/testlib.h"

其中../代表上级目录 , ./代表当前目录
在这里插入图片描述

仅包含头文件 编译不通过。因为头文件仅有申明函数,实现在cpp文件,或者静态库

需要在test项目–>属性–>链接器–>常规–>附加库目录–>输入:

../Debug

发布静态库
新建一个文件夹

  • testlib
    • include
      • testlib.h
    • lib
      • testlib.lib

动态库

动态库在程序编译的时候不会链接到目标代码中,在程序运行是才被载入。
下载 denpendency 软件 denpendency官网

新建动态库项目
用visual studio新建 win32项目(取名为testdll),选DLL
新建头文件testdll.h
在这里插入图片描述

新建源文件testdll.cpp
在这里插入图片描述编译生成会显示 无法启动程序(因为无法独立运行),重新生成就好了

目录如下

  • testdll
    • Debug
      • testdll.dll
      • testdll.ilk
      • testdll.pdb
    • testdll
      • Debug
      • testdll.cpp
      • testdll.h
        打开工具denpendency 把文件testdll.dll拖进去
        在这里插入图片描述

红色画圈的地方显示为空。
而正常的,例如系统提供的kernel32.dll(系统核心动态库,线程进程等)这里则会显示导出的接口
要显示导出的接口要在函数前面写
__declspec(dllexport)
在这里插入图片描述目录如下

  • testdll
    • Debug
      • testdll.dll
      • testdll.lib
      • testdll.ilk
      • testdll.pdb
    • testdll
      • Debug
      • testdll.cpp
      • testdll.h

调用动态库

  • 方法一 隐式调用动态库:
    在新建的cpp文件中写
    1. 导入头文件 include "../testdll/testdll.h"

    2. __declspec(dllimport) 或者``__declspec(dllimport) int add(int a, int b)`

    3. 或者修改testdll.h文件,定义宏 #define DLLAPI __declspec(dllexport)

dllapi在这里插入图片描述需要在test项目–>属性–>链接器–>常规–>附加库目录–>输入:

../Debug

  • 方法二动态调用

参考资料

C/C++基础教学:动态库和静态库开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值