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

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

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

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

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

相关推荐
雨中风华4 分钟前
Linux, macOS系统实现远程目录访问(等同于windows平台xFsRedir软件的目录重定向)
linux·windows·macos
Yeats_Liao13 分钟前
评估体系构建:基于自动化指标与人工打分的双重验证
运维·人工智能·深度学习·算法·机器学习·自动化
爱吃生蚝的于勒33 分钟前
【Linux】进程信号之捕捉(三)
linux·运维·服务器·c语言·数据结构·c++·学习
The森1 小时前
Linux IO 模型纵深解析 01:从 Unix 传统到 Linux 内核的 IO 第一性原理
linux·服务器·c语言·经验分享·笔记·unix
文艺理科生Owen1 小时前
Nginx 路径映射深度解析:从本地开发到生产交付的底层哲学
运维·nginx
期待のcode1 小时前
Redis的主从复制与集群
运维·服务器·redis
翼龙云_cloud1 小时前
腾讯云代理商: Linux 云服务器搭建 FTP 服务指南
linux·服务器·腾讯云
纤纡.1 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
好好学习天天向上~~1 小时前
6_Linux学习总结_自动化构建
linux·学习·自动化
REDcker1 小时前
gRPC开发者快速入门
服务器·c++·后端·grpc