Linux动静态库
动静态库什么是库静态库的特征动态库的特征静态库站在制作的角度站在使用者的角度动态库站在建立者的角度站在使用者角度什么是库一个可执行程序需要经历 预处理 编译 汇编 链接这四个步骤静态程序是在形成.o文件时将它的头文件和库文件进行打包这个打包的操作就是制造库的操作完成这个打包就是完成了一个库的建立#pragmaonce#includestdio.hintadd(intx,inty);~#includemystdio.hintadd(intx,inty){returnxy;}~#includemystdio.hintmain(){printf(1 1 %d\n,add(1,1));return0;}这是我们自己写的代码头文件 函数声明和定义分离指令gcc mystdio.c main.c -o main成功运行出结果2#includestdio.hintmain(){printf(hello linux\n);return0;}代码成功运行通过指令ldd 文件名 或者 file 文件名 查看文件依赖在Linux 中libxxx.a是静态库, libxxx.so是动态库linux的gcc/g编译工具默认是动态链接的但也是可以强制将它变成静态链接在末尾加上 -static就行了静态库的特征在可执行程序编译链接阶段如果include的是静态库那么程序是将静态库里的代码拷贝一份到我们自己本地代码里优点是存储操作简单缺点是容易造成空间浪费尤其是在多个代码使用了同一个头文件之后造成的空间浪费尤其明显动态库的特征可执行程序是在运行阶段链接到动态库它include的是动态库函数的地址表操作系统会将动态库从磁盘加载到内存里这个过程叫做动态链接这里多个问价可以用同一个动态库如果某一个文件使用了动态库里的全局变量就会发生写诗拷贝类似父子进程的关系这里用到了进程地址空间的相关知识静态库站在制作的角度用刚才的mystdio.hmystdio.cmain,c制作一个静态库第一步将mystdio.c运行成libxxx.a文件lib是前缀.a是后缀这里指令ar -rc libxxx.a 库定义专门用来建造静态库-rreplace若静态库文件当中的目标文件有更新则用新的目标文件替换旧的-ccreate建立静态库文件-t列出静态库中的文件-vverbose显示库的详细信息这么手敲一个一个指令太慢了可以用makefile工具快速简化我们的操作//这里是makefile代码 libmymath.a:mystdio.o ar-rc libmymath.a mystdio.o mystdio.o:mystdio.c gcc-c mystdio.c-o mystdio.o.PHONY:clean clean:rm-rf mystdio.o libmymath.a lib.PHONY:output output: mkdir-p mylib/lib mkdir-p mylib/includecp*.a./mylib/libcp*.h./mylib/include ~站在使用者的角度我们自己制作的静态库或者第三方静态库该如何使用呢方法1:将我们的库放到 /lib64/再将我们自己的头文件放到 /usr/include/但是请注意咱们自己写的库很挫不要随随便便的就把咱们自己写的库加载到根目录库底下需要删掉删掉见下图方法二通过指令去调用咱们的库动态库站在建立者的角度动态库和静态库类似大的步骤都差不多但是比静态库复杂了一些它的优点是大大节省的空间的开销动态库使用的是gcc 指令可以这么说动态库是gcc的亲儿子静态库是表的#includemyprint.hvoidprint(constchar*str){printf(%s\n,str);}#includemystdio.hintAdd(intx,inty){returnxy;}#includemystdio.h#includemyprint.hintmain(){printf(1 1 %d\n,Add(1,1));print(hello linux!\n);return0;}一个一个去写指令还是太麻烦了可以使用makefile工具libdi.so:mystdio.o myprint.o gcc-shared mystdio.o myprint.o-o libdi.so mystdio.o:mystdio.c gcc-fPIC-c mystdio.c-o mystdio.o myprint.o:myprint.c gcc-fPIC-c myprint.c-o myprint.o.PHONY:clean clean:rm-rf mystdio.o libdi.so lib.PHONY:output output: mkdir-p mylib/lib mkdir-p mylib/includecp*.so./mylib/libcp*.h./mylib/include站在使用者角度方法一将库文件和头文件拷贝到 根目录下这里步骤和静态库一样方法二就是具体指定库目录和头文件运行这里报错了原因是动态库也要进行运行这里运行时找不到动态库解决方法1、将库拷贝到 根目录 /lib64下于运行方案1一样2、制作软连接这里千万注意建立软连接时不能使用相对路径只能使用绝对路径

相关新闻

YOLOv12镜像实战应用:快速搭建自动驾驶感知系统

YOLOv12镜像实战应用:快速搭建自动驾驶感知系统

2026/7/11 17:57:21 阅读更多 →
小白也能懂的YOLOv13入门指南:一键启动实时检测

小白也能懂的YOLOv13入门指南:一键启动实时检测

2026/7/11 11:32:32 阅读更多 →
YOLOE vs YOLO-Worldv2:实测性能差距有多大?

YOLOE vs YOLO-Worldv2:实测性能差距有多大?

2026/7/5 17:18:40 阅读更多 →

最新新闻

KLayout版图验证引擎:解决纳米级芯片设计的物理验证挑战

KLayout版图验证引擎:解决纳米级芯片设计的物理验证挑战

KLayout版图验证引擎:解决纳米级芯片设计的物理验证挑战 【免费下载链接】klayout KLayout Main Sources 项目地址: https://gitcode.com/gh_mirrors/kl/klayout KLayout作为开源版图验证工具,通过模块化架构和可扩展脚本接口,为纳米级…

2026/7/12 12:45:46 阅读更多 →
AI音乐生成实战:Suno提示词工程与国歌创作指南

AI音乐生成实战:Suno提示词工程与国歌创作指南

如果你最近关注AI音乐生成,可能已经注意到Suno这个平台正在改变普通人创作音乐的方式。但很多人上手后容易陷入一个误区:以为AI音乐生成就是简单输入几个关键词然后等待结果。实际上,真正让AI生成高质量音乐的关键在于 提示词工程 和 音乐…

2026/7/12 12:43:46 阅读更多 →
SMUDebugTool终极指南:如何深度调试你的AMD Ryzen处理器

SMUDebugTool终极指南:如何深度调试你的AMD Ryzen处理器

SMUDebugTool终极指南:如何深度调试你的AMD Ryzen处理器 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://…

2026/7/12 12:41:45 阅读更多 →
如何用免费开源工具3分钟搞定语音转文字:AsrTools终极指南

如何用免费开源工具3分钟搞定语音转文字:AsrTools终极指南

如何用免费开源工具3分钟搞定语音转文字:AsrTools终极指南 【免费下载链接】AsrTools ✨ AsrTools: Smart Voice-to-Text Tool | Efficient Batch Processing | User-Friendly Interface | No GPU Required | Supports SRT/TXT Output | Turn your audio into accur…

2026/7/12 12:35:42 阅读更多 →
Qt6事件处理机制深度解析:从原理到实战优化

Qt6事件处理机制深度解析:从原理到实战优化

1. 项目概述:为什么Qt事件处理是GUI编程的基石搞C GUI开发,尤其是用Qt,你迟早得跟“事件”打交道。这东西听起来有点抽象,但说白了,它就是程序对用户操作(比如点一下鼠标、按一下键盘)或者系统通…

2026/7/12 12:33:42 阅读更多 →
怎样快速实现Android Studio界面汉化:3步完整实战攻略

怎样快速实现Android Studio界面汉化:3步完整实战攻略

怎样快速实现Android Studio界面汉化:3步完整实战攻略 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否曾因Andr…

2026/7/12 12:33:42 阅读更多 →

日新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/12 0:03:13 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/12 0:03:14 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/12 0:03:14 阅读更多 →

月新闻