博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言函数库:动态链接库与静态链接库
阅读量:4211 次
发布时间:2019-05-26

本文共 1458 字,大约阅读时间需要 4 分钟。

首先,函数库就是一些事先写好的函数的集合,是别人分享的,我们可以拿来使用的。经过一些校准和整理,就形成一份标准化的函数库。例如glibc

函数库有两种提供形式:动态链接库与静态链接库

早起函数库里的函数都是直接共享的,就是所谓的开源社区。后来函数库商业化,就出现了静态链接库与动态链接库。

他们是不直接给客户提供源代码,静态链接库是先将源代码只编译不连接形成.o文件,再用tar工具将.o文件归档成.a文件(即静态链接库文件),商业公司通过提供.a文件库和.h头文件给客户使用。客户在使用的时候,通过文件描述得知函数原型,在自己的.c文件中直接调用这些库文件,然后在连接器连接的时候去.a文件库里取出那个函数对应的.o文件,从而生成可执行程序。

动态链接库相比静态链接库效率更高,假设多个程序都使用了某个函数库,那么静态链接库在连接生成可执行程序的时候就要重复占有内存,而动态链接库则不需要库函数的代码段连接到可执行程序中,只是做个标记,等着运行过程中发现调用了一个动态库里的库函数,就会去加载这个动态库到内存中去,不会重复加载。

 

下面介绍一下,如何在vs2019中使用自定义动态链接库(c语言)

建立动态库

1.建立一个动态库项目

建立名称为DLL3的动态链接库项目

项目建立完成后出现下面的项目结构

其中pch.h声明用的头文件,具体函数代码在pch.cpp文件中。dllmain.cpp和framework.h文件分别为动态链接库的入口和默认加载头文件,可以不用管。直接使用自动生成的代码即可。

2.首先是在pch.h的头文件中声明要加入的函数

extern "C" _declspec(dllexport) int Add(int a, int b);

extern "C" _declspec(dllexport) int Sub(int a, int b);
————————————————

3.在pch.cpp中加入函数代码int Add(int a, int b){    return a + b;}int Sub(int a, int b){    return a - b;}

4.编译动态链接库项目,会提示[无法启动程序],在输出框有下面的结果

 

到这里,动态链接DLL库已经生产。其中最主要的是DLL3.lib和DLL3.dll这两个文件。lib是资源描述文件,dll是动态库,函数二进制码集合,里面有函数的函数体,动态库是有规范的。通过lib可以找到对应的dll文件,只要把他们放入到对应的文件夹中。

 

接下来就要介绍动态链接库的使用了。

(1) 在上面生成项目的目录有dll和lib两个生成好的文件。

 

(2) 新建一个c的控制台应用程序UseDLL3_1,把DLL3.dll放入Debug目录下。

(3) 把DLL3.lib放入到UseDLL3_1文件夹下

(4) 在UseDLL3_1项目中新建一个源文件main.c,代码如下:

#include
#pragma comment(lib,"DLL3.lib")int Add(int a, int b);int Sub(int a, int b);int main() { printf("调用动态dll add函数的结果:%d\n", Add(5, 6)); printf("调用动态dll sub函数的结果:%d\n", Sub(5, 6)); getchar(); return 0;}

(5) 运行输出结果:

 

转载地址:http://sqzmi.baihongyu.com/

你可能感兴趣的文章
mongoDB 入门指南、示例
查看>>
不存在插入的一种写法
查看>>
p_vipshop_to_actual_day_shop_sale
查看>>
写MySQL存储过程实现动态执行SQL
查看>>
P_sync_etl_mid_data
查看>>
js正则表达式语法
查看>>
常用正则表达式大全 (转)
查看>>
mysql版同步数据
查看>>
MySQL参数DELAY_KEY_WRITE的详细说明
查看>>
利用MYSQL 日志恢复
查看>>
mysql 大量数据插入(可用于数据添加字段不能添加的情况,因为会copy临时表。这样可以手动分批处理)
查看>>
MySQL数据库中表类型MyISAM与InnoDB的区别
查看>>
windows mysql忘记root密码的解决方法
查看>>
[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键
查看>>
MySql中启用InnoDB数据引擎的方法
查看>>
INNODB 热备工具试验与总结
查看>>
sql server 查看字段备注等信息
查看>>
win10 sql server 2014 服务中需要设置失败后自动重启
查看>>
Windows下单机安装Spark开发环境
查看>>
tomcat如何配置环境变量
查看>>