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 生效。

相关推荐
Johny_Zhao2 小时前
基于 Docker 的 LLaMA-Factory 全流程部署指南
linux·网络·网络安全·信息安全·kubernetes·云计算·containerd·yum源·系统运维·llama-factory
Wy_编程3 小时前
Linux文件相关命令
linux·运维
Viking_bird3 小时前
centos 7.5 + Hadoop 3.2.4 集群搭建
linux·运维·服务器·hadoop·centos
wdxylb5 小时前
云原生俱乐部-RH134知识点总结(1)
linux·云原生
黑客影儿5 小时前
Kali Linux 环境中的系统配置文件与用户配置文件大全
linux·运维·程序人生·安全·网络安全·系统安全·学习方法
岚天start5 小时前
Linux系统网络排查工具总结
linux·运维·网络·监控·扫描·连通性·流量
风静雪冷6 小时前
grep命令要点、详解和示例
linux
我是哈哈hh6 小时前
【MySQL】在UBuntu环境安装以及免密码登录入门
linux·数据库·mysql·ubuntu
Lovyk6 小时前
基于 Ansible 与 Jinja2 模板的 LNMP 环境及 WordPress 自动化部署实践
linux·运维·服务器·自动化·ansible
LKAI.6 小时前
传统方式部署(RuoYi-Cloud)微服务
java·linux·前端·后端·微服务·node.js·ruoyi