静态链接和动态链接
创作时间:
作者:
@小白创作中心
静态链接和动态链接
引用
与非网
1.
https://m.eefocus.com/article/1745295.html
在C语言编程中,链接是将多个目标文件或库文件组合成一个可执行程序的过程。链接方式主要分为静态链接和动态链接两种。本文将详细介绍这两种链接方式的区别,并通过具体的代码示例展示如何创建和使用动态链接库。
一、静态链接
静态链接通过静态库进行链接,生成的目标程序中包含运行需要的所有库,可以直接运行,不过就是文件比较大。静态库是汇编产生的.o文件的集合,一般以.a文件形式出现。gcc在使用静态链接的时候需要加上-static参数。
二、动态链接
动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需要的动态库才能运行,动态链接程序轻便,但必须依赖动态库。Linux下的动态链接库实际上是共享目标文件,一般是以.so文件形式存在。GCC默认是动态链接不需要加参数。
举例子看一下动态链接库的使用方法,创建三个C语言文件:mymath.c、mymath.h、test.c。
通过两个变量相加的方式来举例说明。
mymath.h添加内容如下:
#ifndef __MYMATH_H_
#define __MYMATH_h_
#include<stdio.h>
extern int add(int a,int b);
#endif
mymath.c添加内容如下:
#include "mymath.h"
int add(int a,int b){
return a+b;
}
最后来一个测试文件 test.c(在这里需要注意的一个小细节,调用自己写的.h文件时,必须使用双引号,“xxxx.h”):
#include<stdio.h>
#include"mymath.h"
void main(){
printf("2+3=%dn",add(2,3));
}
然后进行编译,因为test引用了mymath.h,所以不能单独编译,gcc test.c mymath.c一起进行,否则就会报错。(如下编译正确)
接下来是生成动态链接库的方法,gcc -shared xx -o xxx.so,当我们使用cat去进行查看的时候会发现,so文件里全是乱码,这就是使用动态链接库的一个好处,可以防止核心算法的泄露。
现在就可以将mymath.c删除掉了:
直接调用库编译发现程序不能运行。
下面将我们自己建立的库移动到/usr/lib目录下试试,然后发现代码运行成功。
可以在Linux系统下自己尝试下。
热门推荐
房东必读:发票开具、房屋转租与责任承担的法律指南
项目管理如何命名文件夹
谁说只有胖子才可以穿旗袍?——不同身材的旗袍穿搭指南
八仙传说:中国传统文化中的山海传奇
怎么画拥抱:姿势、透视、情感表达技巧全攻略
伤官合杀是什么意思
探索世界规律的科学实践活动方案
棉花复种生产模式助推新疆农业种植结构优化调整
动效设计中的节奏魔力
win11删除文件确认设置在哪里?如何调整?
因租房押金起纠纷,法院调解促和解
古墓里的骨头去哪了?原来它们有这些重要用途
俯卧撑终极训练指南
警衔如何分级?一级警监一般授予什么人,是什么级别的干部?
新婚夫妻的第一夜,为什么叫“合卺之欢”?合卺又是什么意思?
喜欢/热爱倾向:一种强大的心理调节工具
教育部学历证书电子注册备案表有效期是多久
茄子豆角这样做,零失败!
蔬菜沙拉制作全攻略:从选材到摆盘,打造营养美味的健康佳肴
易经中的"旬空"概念详解
闲鱼申诉成功技巧是什么
行情大涨时,如何避免“卖飞”?
汽车电瓶测量方法大全:从外观到使用经验,全面解析如何判断电瓶好坏
科普漫画书,将原本枯燥乏味的科学知识变得生动有趣
【春节传统习俗】腊月二十七 宰年鸡 赶大集
大学智慧体测如何通过数据分析优化训练计划
“还原一个真实的立体的鲁迅”
每日古文字‖甲骨文“云”字解读
分居期间工资花了也需要分割
电机多物理场仿真方案