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

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

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

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

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

相关推荐
sunxunyong10 分钟前
doris运维命令
java·运维·数据库
Guheyunyi20 分钟前
智慧消防管理系统如何重塑安全未来
大数据·运维·服务器·人工智能·安全
椰子今天很可爱35 分钟前
五种I/O模型与多路转接
linux·c语言·c++
Lueeee.1 小时前
Linux kernel Makefile 语法
linux
爱吃山竹的大肚肚3 小时前
EasyPOI 大数据导出
java·linux·windows
极地星光3 小时前
dmesg 工具的核心功能与作用
linux
雾削木3 小时前
k230 Pyhton三角形识别
运维·服务器·网络·stm32·智能路由器
北京聚信万通科技有限公司4 小时前
传输协议:AS3
服务器·网络·安全·电子数据交换·as3
福尔摩斯张4 小时前
C++核心特性精讲:从C语言痛点出发,掌握现代C++编程精髓(超详细)
java·linux·c语言·数据结构·c++·驱动开发·算法
hgz07104 小时前
Linux服务器环境部署与JMeter压测准备
linux·服务器·jmeter