Linux——库文件生成和使用

目录

一、库文件

1.定义

2.linux系统存储库的一般位置

3.库的分类

二、静态库的生成和使用

1.静态库的生成

2.静态库的使用

三、共享库的生成和使用

1.共享库的生成

2.共享库的使用

3.强调

四、共享库和静态库的区别

一、库文件

1.定义

库是一组预先编译好的方法的集合。

2.linux系统存储库的一般位置

位置:/lib和/usr/lib。

注意:库的头文件一般存储在/usr/include下或子目录。

3.库的分类

①静态:命名规则 libxxx.a

②共享库(动态库):命名规则 libxxx.so

二、静态库的生成和使用

1.静态库的生成

假设此时有多个源文件,比如file1.c和file2.c,将它们打包成一个静态库。

①将需要生成库文件的所有".c"文件编译成".o"文件

gcc -c file1.c

gcc -c file2.c

②使用ar命令将所有的".o"文件生成静态库

ar crv libmylib.a file1.o file2.o

其中:c表示创建库 r表示将方法添加到库中 v表示显示过程

2.静态库的使用

gcc -o main main.c -L. -lmylib

注意:

① -L 指定库的存储路径(表示库文件所在目录)

②-l 后面跟库名(不带前缀lib和后缀.a)

三、共享库的生成和使用

1.共享库的生成

假设此时有多个源文件,比如file1.c和file2.c,将它们打包成一个共享库。

①将需要生成库文件的所有".c"文件编译成".o"文件

gcc -c file1.c

gcc -c file2.c

②使用gcc命令将所有的".o"文件链接生成共享库

gcc -shared -fPIC -o libmylib.so file1.o file2.o

2.共享库的使用

gcc -o main main.c -L. -lmylib

注意:

① -L 指定库的存储路径(表示库文件所在目录)

②-l 后面跟库名(不带前缀lib和后缀.so)

3.强调

①直接执行会出错:是因为系统默认只会去存储库的标准位置(/lib或/usr/lib等)加载,所以要将库拷贝到/usr/lib下,再执行程序。也可以通过设置环境变量"LD_LIBRARY_PATH"指定的路径。

②通过ldd命令查看可执行程序使用了哪些共享库。(ldd 可执行程序)

③如果库的存储路径有同名的共享库和静态库,则默认使用共享库。

四、共享库和静态库的区别

静态库在链接时将用到的方法包含在最终生成的可执行程序中。静态库中如果删除库文件,仍然可以运行(静态库在编译时被复制到程序中,生成的可执行文件内部包含了所有静态库的代码。)

动态库不包含,只做标记,运行程序时,才动态加载。动态库中删除库文件,程序运行时出现错误。(共享库只存在一份,可以被多个程序共享使用)

相关推荐
程序员清风6 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
readhere7 小时前
从ZYNQ7000开发板,学会启动嵌入式Linux系统——入门学习:EBAZ4205篇目录
linux·启动·嵌入式linux·zynq7000·ebaz4205
打工仔折腾 AI8 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
yyuuuzz8 小时前
跨境站点日志时区混乱的排查记录
运维·服务器·网络·云计算·aws·1024程序员节
‎ദ്ദിᵔ.˛.ᵔ₎8 小时前
关于Linux 线程局部存储的认识
linux·运维
GlobalInfo8 小时前
全球及中国风电叶片检测机器人行业研究报告(2026版):市场现状、行业前景与占有率分析
运维·网络·人工智能·机器人
数字新视界10 小时前
一体化机柜在数据中心运维中的创新应用与优势分析
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
隔窗听雨眠10 小时前
KingbaseES平替全链路实践:从迁移评估到可持续运维
运维
skywalk816310 小时前
登到192.168.1.5那台机器,看看今天白天,大约从早晨到晚上,都卡住了。看看因为什么卡住,为什么卡住而没有杀死那个导致卡死的进程,为什么
运维·系统·freebsd
运维行者_10 小时前
网络监控工具怎么选?从设备监控到智能运维的能力清单
运维·服务器·开发语言·网络·人工智能·支持向量机·php