Linux中关于库的概念

一、概念

库是一个二进制文件,包含的代码可被程序调用。例如标准C库、数学库、线程库...

库有源码,可下载后编译;也可以直接安装二进制包。

库是事先编译好的,可以复用的代码。

在OS上运行的程序基本上都要使用库,使用库可以提高开发效率。

Windows和Linux下的库文件的格式不兼容。

Linux下包含静态库和共享库。

二、静态库

1.静态库特点

编译(链接)时把静态库中相关代码复制到可执行文件中。

程序中已包含代码,运行时不再需要静态库。

程序运行时无需加载库,运行库速度更快。

占用更多磁盘和内存空间。

静态库升级后,程序需要重新编译链接。

2.静态库的创建

1.编写库文件代码,编译为.o目标文件。

2.ar 命令 创建libxxxx.a 文件

ar -rsv libxxxx.a xxxx.o

注意:1静态库名字要以lib开头,后缀名为.a

2没有main函数的.c文件不能生成可执行文件。

3.链接错误

test.c:(.text+0x15):对'hello'未定义的引用

collect2: error: ld returned 1 exit status

含义:表示hello函数在编译的源码内没有找到实现

解决:实现代码或者找到对应函数的库并且链接它。

4.链接静态库

gcc -o 目标文件 源码.c -L路径 -lxxxx

-L表示库所在的路径

-l后面跟库的名称

三、动态库

1.生成位置无关代码的目标文件

gcc -c -fPIC xxx.c xxxx.c ....

2.生成动态库

gcc -shared -o libxxxx.so xxx.o xxx.o ....

3.编译可执行文件

gcc -o 目标文件 源码.c -L路径 -lxxxx

2.可执行文件错误

./test: error while loading shared libraries: libmyheby.so: cannot open shared object file: No such file or directory

含义:可执行文件所使用的动态库找不到

解决办法:

找到动态库,添加到/usr/lib里面

或者使用export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:你的动态库目录

添加在~/.bashrc 文件里面

使用source ~/.bashrc 生效。

相关推荐
曦夜日长6 小时前
Git系统篇,Git本地使用(一):从“究极进化版“到三个区域的底层原理
大数据·linux·git·elasticsearch
shimly1234567 小时前
给断网无 sudo ubuntu22.04 机器安装 nodejs
linux
别动我齐刘海8 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
Lsetea8 小时前
OpenSSL报certificate chain too long:error 22与verify_depth深度排查
linux·https·ssl证书·openssl·证书链
不像程序员的程序媛9 小时前
linux常见文本操作命令
linux·运维·服务器
wangbing112510 小时前
开发指南149-IotDB-常用命令
linux·运维·iotdb
看着博客敲代码10 小时前
WorkBuddy 接上 Kali MCP 做自动化渗透:信息收集到初步验证的落地记录
linux·人工智能·安全·网络安全·自动化
小HANN12 小时前
华为云企业网站上云实战|从零搭建高可用WordPress全站架构(ECS+RDS+ELB+弹性伸缩+云监控闭环)
linux·运维·服务器·经验分享
星恒随风12 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
GeW12 小时前
2026新质生产力路线图:Linux、数据库与智能算力融合报告
linux