尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

库制作与原理

库制作与原理
📅 发布时间:2026/7/18 5:18:52

1:如何制作库。库的制作视角
2:如何使用库 库的使用者角度
3:库的制作和加载原理 —ELF
库是提前写好的diamanté和数据的集合,可以被我们自己的程序直接进行链接使用

linux 动态库:.so 静态库 .a

windows 动态库 .dll 静态库 .lib
库本质是二进制文件 文件=内容+属性 磁盘
为什么要存在库?提高开发者效率 增加代码健壮性 鲁棒性
linux中库名 libXXX.so/.a

src=(shellls∗.c)这种写法等价于src=(shell ls *.c)这种写法等价于 src=(shellls∗.c)这种写法等价于src=(wildcard.c)

linux中 .h头文件一般放在/usr/include/ 这个目录中 或者是存放在当前路径中
gcc -E main.c -o main.i
gcc -S main.i -o main.s
gcc -C main.s -o main.o
gcc main.c -o main
gcc -o main main.o hello.o
gcc -o myexe main.o -L myc/lib -lmyc
gcc main.c -I myc/include -L myc/lib -lmyc -o main.exe
linux库名称 :lib库名.a/.so .a是静态库 .so是动态库
-I代表.h文件所在的路径 -L 库所在的路径 -l库名称
把库安装到系统中的方法:
把库安装到 /lib64
把头文件安装到/usr/include
sudo cp myc/include/
/ /usr/include/
sudo cp myc/lib/* /lib64 -rf
这个时候 gcc main.c -lmyc 虽然此时库文件已经在这个lib64系统文件夹中,但是由于是第三方库,所以需要加上-lmyc
sudo rm usr/include/my_str*
库->能不能出现main函数?
不可以,库编译到.o就可以了,就不会在链接了(链接需要有main函数)
mv makefile makefile_backup
库的制作和使用的过程中,使用动态库是最佳实践
cp makefile_back makefile
复制makefile_back 这个文件到当前目录之下生成一个叫makefile的文件

这个图片是原来makefile的图片
gcc默认就能生成动态库
库是多个.o文件加工而来的
静态库的加工方式 ar-rc 例如ar-rc 目标库的名称(.a) 原材料名称
动态库的加工方式 gcc -shared -o 目标文件名称(.so)原材料名称

gcc -o myexe main.c -I myc/include -L myc/lib -lmyc

.i是预处理文件
.s是汇编文件
.o目标文件

除了运行程序之外需要完整路径 其他linux指令操作要是这个文件在当前路径,就可以直接写这个文件的名称
./myexe 这个操作,和编译器就没有关系了,os加载运行的
动态链接的可执行程序,除了要运行你自己的程序之外,还需要加载动态库

如何让os找到你的动态库在程序运行的时候。
如何让os查找到库的路径
1: /usr/lib64
动态链接的库也在这个路径之下,操作系统会进行查找
linux指令
ldd myexe专门查看动态链接程序 / 动态库依赖哪些 .so 动态共享库,用于排查「找不到 so」运行报错。
./exe
2:在系统路径之下建立软链接
sudo ln -s /home/whb/code/code/118/code/lesson/user/myc/lib/libmyc.so /lib64/libmyc.so
3:
环境变量
LD_LIBRARY_PATH:有可能不存在 保存linux系统搜索路径
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/home/whb/code/code/118/lib/

这个时候就给了操作系统第二次选择机会,就是去环境变量里面寻找动态库的地址
但是当我们再次登入这个xshell时候,会重新读区配置文件,重新设置环境变量
临时的!怎么把它变成永久化,设置到对应的配置文件中
家目录配置文件中:.bash_profile .bashrc
vim ~/.bash_profile
~代表家目录 /root
export PATH=/home/whb/code/code/118/bin:$PATH
export的作用是把他标记为环境变量

静态链接(.a 静态库)
编译时把库的全部机器代码复制、打包进最终可执行程序里,运行时不再依赖原库文件。
动态链接(.so 动态库)
编译只记录库名、函数符号,不复制代码;程序运行时系统才去磁盘加载 .so 文件。
1.头文件分离问题
2.如果同时存在动静态库呢
如果同时存在动静态库,优先进行动态链接
要是一定要静态链接 gcc -o myexe main.c -L myc/lib -lmyc -static:建议编译器优先使用静态链接
只提供静态库,不加static,动态链接的,局部静态,整体动态,把.exe用到的部分进行静态链接(拷贝)其他使用的是动态链接
3.你要是使用/lib64里面的库,需要写-l库的名称

相关新闻

  • Ubuntu 26.04开发版双系统安装:复制粘贴功能失效的深度排查与解决方案
  • 2001-2024年30米分辨率中国主要作物分布数据集
  • 抖音视频解析器:一键去水印下载原画质视频的利器

最新新闻

  • 如何用对话式AI工具Video-Use实现智能视频编辑:5大核心优势详解
  • Linux Command Library:终极离线命令行参考工具完全指南
  • Obsidian Kanban 可视化管理的艺术:从基础到精通的思维升级
  • GPT-5.6技术解析:程序化工具调用与多智能体协同实战指南
  • C++多线程资源访问实战:从数据竞争、死锁到无锁编程的全面解析
  • Thorium浏览器:3大架构革新与5倍性能飞跃的深度技术解析

日新闻

  • 宝珀中国官方售后服务中心|官方热线和维修地址权威信息声明(2026年7月更新) - 宝珀官方售后服务中心
  • # 2026年北京知识产权律师推荐怎么选?看这五点关键不踩雷 - 本地品牌推荐
  • 2026实测教程:生成的拼豆图纸不满意怎么修改才省事 - 省事研究所

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号