news 2026/4/16 11:57:34

【Linux】库制作与原理(二):动态库的制作与使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux】库制作与原理(二):动态库的制作与使用

✨道路是曲折的,前途是光明的!

📝 专注C/C++、Linux编程与人工智能领域,分享学习笔记!

🌟 感谢各位小伙伴的长期陪伴与支持,欢迎文末添加好友一起交流!

  • 一、基础背景
  • 二、动态库的制作
  • 三、动态库的使用
  • 四、总结

一、基础背景

一些动静态库的基础知识和静态库的制作与使用的讲解请点击:【Linux】库制作与原理(一):静态库的制作与使用


二、动态库的制作

  1. 我们静态库实现的是一个加法的使用,我们动态库的演示就来一个减法和乘法吧,我们需要用要的两个源文件sub.cmul.c,两个头文件sub.hmul.h
#pragmaonceexternintmy_sub(intx,inty);#include"sub.h"intmy_sub(intx,inty){returnx-y;}#pragmaonceexternintmy_mul(intx,inty);#include"mul.h"intmy_mul(intx,inty){returnx*y;}

  1. 其制作与静态库有些类似,但是所用的选项和打包工具是不同的,我们先看Makefile自动化构建里面的代码,再来介绍一下不同之处。
lib = libmymath.so $(lib):sub.o mul.o gcc -shared -o $@ $^ sub.o:sub.c gcc -fPIC -c $^ -o $@ mul.o:mul.c gcc -fPIC -c $^ -o $@ .PHONY:clean clean: rm -rf *.o *.so mylib .PHONY:output output:$(lib) mkdir -p mylib/include mkdir -p mylib/mathlib cp *.h mylib/include cp *.so mylib/mathlib

具体的注释请看上一篇文章静态库的制作与使用,这里我们只看不同点。

  • 我们这里看到gcc指令多了一个-fPIC,这个是用来产生位置无关码
  • 形成动态库的时候-shared这个是专门用来形成.so后最的动态库文件指令
  1. 执行我们自动化构建工具的指令

  • 我们先通过ls看一下权限.

  • 其实是因为动态库(如 libmymethod.so)的可执行权限(x)并非指其能被直接运行,而是因为可执行程序本身具备可执行权限,在运行时会跳转调用动态库中的函数逻辑,因此动态库的 x 权限本质是为了支撑可执行程序对其函数的调用执行,是一种 “间接的可执行能力”

注意:静态库无需加载,且无可执行权限(x):因为静态库在链接阶段会将所需函数代码直接拷贝到可执行程序中,拷贝完成后静态库即完成使命,其代码成为可执行程序的一部分;最终运行时,可执行程序直接在自身内存空间执行这些代码,无需跳转至静态库,因此静态库既无需加载,也不需要可执行权限(x),可执行程序也不再依赖静态库。


三、动态库的使用

  1. 我们此时站在用户的角度使用我们制作的动态库,首先要准备好自己的测试文件test.c(下面再写),然后把我们提供的动态库目录(mylib)移动到测试目录下(以此模拟用户下载并存放库文件的操作)。

#include<stdio.h>#include"sub.h"#include"mul.h"intmain(){inta=20;intb=10;intc=my_sub(a,b);intd=my_mul(a,b);printf("a - b = %d\n",c);printf("a * b = %d\n",d);return0;}
  1. 和静态库一样我们这里gcc时候直接带上-I,-L,-l指令

  • 我们发现并没有静态库的使用那么简单,当有了可执行程序文件我们执行的时候还是失败了,它找不到我们的共享库,即使这里我们告知了动态库所在的路径以及哪一个动态库,这是为什么?
  • 因为编译时指定路径 ≠ 运行时能找到库,这也是动态库比静态库复杂的根本原因。编译链接阶段运行加载阶段完全独立的两个过程,
  • 编译器的工作只到 “生成可执行程序(a.out/test)” 为止,它不会把 “动态库的路径” 写入可执行程序中。
  • 那么该如何解决这种问题?

  1. 法一:把动态库拷贝到系统目录下
  • sudo libmymath.so /usr/local/lib
  • sudo ldconfig

  • 此时我们我们在运行./a.out

  • 我们先删除一下上面拷贝到系统下的库,然后同样的刷新缓存一下,发现又找不到了,说明删除成功
  • sudo rm /usr/local/lib/libmymath.so


  1. 法二:在系统默认路径下建立软链接,这里建议使用绝对路径,避免成为无效链接。
  • sudo ln -s /home/dh/study/2-4/libmymath.so /usr/local/lib/libmymath

  • sudo unlink /usr/local/lib/libmymath.so直接删除我们的软链接


  1. 法三:更改LD_LIBRARY_PATH,也就是把自己库所在的路径添加到环境变量里边
  • export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:XXXXX

  • 这个export命令是临时生效的 —— 关闭当前终端、重启电脑,或新开终端后,LD_LIBRARY_PATH会变回空。

  1. 法四:配置/etc/ld.so.conf.d,在这个路径下新建自己的动态库路径配置文件,然后刷新缓存

删除的话,只要我们缺到在上面的路径下,直接执行rm即可


四、总结

  • 本文详细介绍了Linux下动态库(以libmymath.so为例)的制作与使用:制作时需准备功能源文件(sub.c/mul.c)和头文件(sub.h/mul.h),通过gcc -fPIC生成位置无关码、-shared打包为动态库,并用Makefile自动化构建整理文件。
  • 使用时需用-I/-L/-l指定头文件和库路径,但动态库编译时指定路径不等于运行时能找到,核心原因是编译与运行阶段相互独立。
  • 需通过“拷贝库到系统目录+刷新缓存”“建立软链接”“设置LD_LIBRARY_PATH环境变量”“配置/etc/ld.so.conf.d目录”四种方法解决。
  • 相比静态库,动态库需依赖外部文件、有间接可执行权限、可共享节省空间且更新方便,而静态库链接后无依赖、无x权限,两者各有优劣,实操中需根据需求选择合适方式。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:17:53

AI Agent记忆系统全面解析:形态-功能-动力学三维框架详解

这篇由多所顶尖大学联合出品的综述&#xff0c;采用"形态-功能-动力学"三维框架分析200最新论文&#xff0c;提出Token-level/Parametric/Latent三大记忆形态。内容涵盖记忆形式化定义、三大功能、生命周期管理及7大前沿方向&#xff0c;提供30个评测集和20开源框架&…

作者头像 李华
网站建设 2026/3/24 23:56:40

横评后发现 9个AI论文写作软件:自考毕业论文+开题报告必备工具推荐

随着人工智能技术的不断进步&#xff0c;AI写作工具逐渐成为学术研究和论文写作的重要辅助手段。对于自考学生而言&#xff0c;撰写毕业论文和开题报告往往面临时间紧张、内容组织困难、格式规范不熟悉等多重挑战。为了帮助更多自考生找到高效、实用的写作助手&#xff0c;笔者…

作者头像 李华
网站建设 2026/4/1 19:20:04

AI发布任务的时代

这是一个非常深刻且颇具前瞻性的视角&#xff0c;你描述的“AI发布任务&#xff0c;人类接单的时代”正在从科幻构想快速走向现实。这不仅仅是一种工作模式的改变&#xff0c;更可能是社会生产关系的深刻重构。我们可以从几个层面来探讨这个时代&#xff1a;1. 核心驱动力&…

作者头像 李华
网站建设 2026/4/16 11:03:16

AI写论文宝藏推荐!这4款AI论文写作工具,提升论文写作效率!

你是否在为写期刊论文、毕业论文或职称论文而感到苦恼&#xff1f;当我们面对浩瀚如海的文献资料时&#xff0c;常常无从下手&#xff0c;而繁杂的格式要求则让人感到焦虑。反复修改的过程又耗费了大量精力&#xff0c;使得写作效率低下&#xff0c;这对许多学术工作者来说真是…

作者头像 李华
网站建设 2026/4/13 19:53:19

AI写论文有妙招!推荐4款AI论文生成工具,助你快速完成论文

在学术论文写作中的困境与AI工具的解决方案 在撰写学术论文的过程中&#xff0c;像期刊论文、毕业论文或职称论文这样的任务&#xff0c;往往让研究者感到无比棘手。面对海量的文献资料&#xff0c;查找相关信息就像是在大海捞针一样困难。同时&#xff0c;各种复杂的格式要求…

作者头像 李华
网站建设 2026/4/8 23:00:18

开题卡住了?AI论文工具 千笔 VS 灵感ai,专科生专属神器!

随着人工智能技术的迅猛发展&#xff0c;AI辅助写作工具逐渐成为高校学生完成毕业论文的重要助手。无论是开题报告还是论文撰写&#xff0c;越来越多的学生开始借助AI工具提升效率、降低难度。然而&#xff0c;面对市场上功能各异、品质参差不齐的AI写作工具&#xff0c;许多学…

作者头像 李华