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 可执行程序)

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

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

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

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

相关推荐
三劫散仙24 分钟前
mac m1上使用Kerberos访问远程linux hadoop集群的正确姿势
linux·hadoop·macos
彬彬醤30 分钟前
Mac怎么连接VPS?可以参考这几种方法
大数据·运维·服务器·数据库·线性代数·macos·矩阵
Sadsvit3 小时前
网络聚合链路与软件网桥配置指南
linux·运维·服务器·网络·centos
___波子 Pro Max.3 小时前
Linux数字列排序命令
linux
网硕互联的小客服3 小时前
如何配置安全的SFTP服务器?
运维·服务器·安全
sinat_286945193 小时前
AI服务器介绍
服务器·人工智能·算法·chatgpt·transformer
ALLSectorSorft3 小时前
搭子交友 app 动态分享与打卡系统设计实现
java·服务器·数据库·人工智能·oracle·交友
程序员不迷路4 小时前
Nginx学习
运维·nginx
雅菲奥朗4 小时前
雅菲奥朗SRE知识墙分享(一):『SRE对智能运维领域所产生的深远影响』
运维·ai·sre
--运维实习生--4 小时前
shell脚本第二阶段-----选择结构
linux·运维·shell编程