当前位置: 首页 > news >正文

C中静态库和动态库的使用

2.使用尖括号包括

如果要使用尖括号包括头文件,有两种方法

1.将头文件移动到标准头文件目录,linux为/usr/local/include.windows下为C:\MinGW\include

2.编译时指定头文件目录,gcc -I/头文件目录 … 编译时-I参数就是用于指定头文件目录

3.静态库

将文件编译为静态库,可以将多个目标文件保存为一个存档,在linux中存档命令为"ar",例如

ar -rcs libmylib.a source1.o source2.o

参数r表示如果.a文件存在,则更新它,c表示创建存档时不反馈信息,s表示在.a文件开头建立索引,文档名必须以lib开头,否则编译器无法找到该存档

编译时使用静态库的方法为使用-l参数,如果该静态库处在标准目录(linux下为/usr/local/lib)中,则无需指定目录,如果不在标准目录中,需要使用-L参书指定静态库所处的目录,例如

gcc test.c -L/my_lib -lmylib -o test

3.使用静态库实例

创建头文件hellow.h,how.h,c文件hellow.c,how.c,main.c,以及一个Makefile文件

  • hellow.h

void hellow();

  • how.h

void how();

做完之后可以将两个头文件移动到标准头文件目录下,如果不移动,后面的makefile文件需要使用-I参数,指定头文件目录为当前目录

  • hellow.c

#include<hellow.h>

#include<stdio.h>

void hellow()

{

printf(“hellow world\n”);

}

  • how.c

#include<how.h>

#include<stdio.h>

void how()

{

printf(“how are you\n”);

}

  • main.c

#include<stdio.h>

#include<hellow.h>

#include<how.h>

int main()

{

hellow();

how();

return 0;

}

  • Makefile文件

#include<hellow.h>

#include<how.h>

hellow.o:hellow.c

gcc -c hellow.c -o hellow.o

how.o:how.c

gcc -c how.c -o how.o

libgreet.a:hellow.o how.o

ar -rcs libgreet.a hellow.o how.o

run:main.c libgreet.a

gcc main.c -L. -lgreet -o run

  • 运行make run

[root@izhqmn61154vmrz libTest]# make run

gcc -c hellow.c -o hellow.o

gcc -c how.c -o how.o

ar -rcs libgreet.a hellow.o how.o

gcc main.c -L. -lgreet -o run

  • 运行run

[root@izhqmn61154vmrz libTest]# ./run

hellow world

how are you

  • 由上面的实例可以看出,静态库是由不同的目标代码组件而成的,需要先编译.o文件,再创建.a文档,再将它们链接成可执行程序,一旦用这些独立的目标代码创建了可执行程序,就没办法修改组成静态库的目标文件,除非重新编译.o文件,创建.a文档…,这也是它被称为静态库的原因
4.动态库

静态库在生成执行文件后无法修改组成执行文件中的目标代码,而动态库通过将目标代码分别保存在单独的文件中,在程序运行时才将之动态的链接到一起,从而实现了可以修改目标文件的目的

  • 创建动态库

将目标代码转换为动态库之前,需要先将它编译为.o目标文件:

gcc -fPIC -c source.c -o source.o

-fPIC表示想创建位置无关代码,在linux中必须加这个参数,然后创建动态库

gcc -shared source.o -o source.so

-shared选项将.o文件转化为动态库,在linux中动态库被称为共享目标文件,后缀名为.so,而在windows中,动态库被称为动态链接库,后缀名为.dll

  • 动态库使用实例

创建头文件hellow.h,c文件hellow.c,main.c将头文件放在上一级目录的includes目录中,同时创建libs目录,文件内容与静态库使用的文件相同

  • 将hellow.c文件编译为.o文件
http://www.lryc.cn/news/532799.html

相关文章:

  • Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM
  • 【FPGA】 MIPS 12条整数指令 【3】
  • Mac 部署Ollama + OpenWebUI完全指南
  • 蓝桥杯小白打卡第二天
  • Docker Compose:容器编排的利器
  • springboot项目的单元测试
  • JVM图文入门
  • cursor 开发java项目教程简单上手
  • 优化fm.jiecao.jcvideoplayer_lib中视频横竖屏自动适配原视频方案
  • aws(学习笔记第二十七课) 使用aws API Gateway+lambda体验REST API
  • 物联网的三层架构:感知层、网络层与应用层
  • 常用抓包工具tcpdump、Fiddler、Charles、Wireshark 和 Sniffmaster 下载地址
  • π0开源了且推出自回归版π0-FAST——打造机器人动作专用的高效Tokenizer:比扩散π0的训练速度快5倍但效果相当
  • js-对象-JSON
  • Houdini subuv制作输出阵列图
  • 虚幻基础17:动画蓝图
  • 路由器及工作原理与常用路由配置命令详解
  • Windows编程:下载与安装 Visual Studio 2010
  • R语言 文本分析 天龙八部
  • 深度学习 Pytorch 建模可视化工具TensorBoard的安装与使用
  • 【免费】2007-2019年各省科技支出占一般公共预算支出的比重数据
  • 19爬虫:使用playwright登录超级鹰
  • [转]Java面试近一个月的面试总结
  • Spring Boot中使用MockMvc测试PATCH请求控制器
  • html转PDF文件最完美的方案(wkhtmltopdf)
  • ip地址是手机号地址还是手机地址
  • 【大数据技术】搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn)
  • 从零开始:OpenCV 图像处理快速入门教程
  • springboot简单应用
  • 【DeepSeek】DeepSeek小模型蒸馏与本地部署深度解析DeepSeek小模型蒸馏与本地部署深度解析