动静态库的理解、制作、使用。

这篇具有很好参考价值的文章主要介绍了动静态库的理解、制作、使用。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.动静态库的理解。

1.什么是库?

代码是无穷无尽的,当程序猿在写一些项目时,未必所有代码亲历亲为,他们可以在网上寻找大佬写过的一些有关需求的代码,这些代码可以让他们拿过来直接使用,而省去了许多精力。把一些代码进行打包,形成的便是库了。 


上面所说,库就是将代码进行打包。这个说法是方便读者理解而所说的。要想进一步的理解库,我们要对程序的编译过程进行简单理解。 

程序的编译有四道工序预处理,编译,汇编,链接。

预处理:头文件展开,去注释,条件编译,宏替换。.c->.i

编译:将代码编译为汇编代码。.i->.s

汇编:将汇编代码转为可重定位的二进制文件。.s->.o

链接:链接库文件,形成可执行程序。.o->exe


库文件便是.o文件的集合,当程序猿拥有了.o文件,每次复用这些代码就不需要从头开始编译,只需要拥有这些.o文件和对应的头文件,就可以轻松的使用别人的代码,在自己的.c文件中包头文件,编译时进行库的链接。 

2.动静态库的区别

静态库:以拷贝的方式,将方法的集合(库)直接拷贝到可执行程序中
动态库:以动态链接的方式,将要链接的库函数地址拷贝到可执行程序中

静态库将方法的集合(库)直接拷贝可执行程序中就决定了这个可执行程序在运行的时候不再需要库文件,可以在随意运行,但把库直接拷贝到可执行程序当中会导致可执行程序体积巨大

 动态库相较于静态库更加灵活,可以做到一库同时被多个可执行程序使用,每个可执行程序内部只有库函数的地址,并不是将整个库内置入可执行程序中,让可执行程序体积小巧

linux系统中:静态库后缀为.a 动态库后缀为.so

windows系统中: 静态库后缀为.lib 动态库后缀为.dll

二.动静态库的制作和使用。

接下来亲手制作动静态库来感受:

静态库的制作和使用:

我们将要制作一个简易的math库,库中包含加减乘除四种方法。在main.c中调用这些方法。

 动静态库的理解、制作、使用。,Linux学习之路,linux,服务器

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器 我们将mathlib文件夹中的.c文件全部编译为.o二进制文件

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器 .c文件已经没用了,删除

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器

现在这个mathlib文件夹中只有头文件和二进制.o文件了,我们将所有.o文件打包形成静态库,使用命令:

ar -rc libmath.a *.o   //将所有.o二进制文件打包形成math静态库

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器

库已经制作完毕,将所有.o文件删除

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器 现在mathlib文件夹中仅有静态库和头文件了。下面尝试编译main.c

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器

这里涉及gcc编译时的一些选项: 

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器


动态库的制作和使用:

动态库的制作和静态库的制作在.o文件打包之前完全相同,在.o文件打包形成动态库的时候改为gcc的命令:

gcc -shared -o libmath.so *.o

编译时和静态库做法也相同

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器只不过在运行可执行程序时会报错:原因是没有将可执行程序和动态库建立动态链接

动静态库的理解、制作、使用。,Linux学习之路,linux,服务器

下面提供多种动态链接的方法:

1.将动态库拷贝到系统库目录/usr/lib64中(运行时默认会在这里查找需要的库)

2.将动态库拷贝到可执行程序所在的目录 (运行时默认会在当前目录查找需要的库)

3.建立软链接(在当前目录或者/usr/lib64目录)

ln -s lib/mathlib.so mathlib.so

4.设置环境变量(LD_LIBRARY_PATH,默认会在这个环境变量里查找需要的库)

5.创建系统关于动态库的配置文件,

touch /etc/ld.so.conf.d/dy.conf

然后在新建的配置文件中添加动态库的绝对路径。文章来源地址https://www.toymoban.com/news/detail-820455.html

到了这里,关于动静态库的理解、制作、使用。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 动静态库的理解、制作、使用。

    1.什么是库? 代码是无穷无尽的,当程序猿在写一些项目时,未必所有代码亲历亲为,他们可以在网上寻找大佬写过的一些有关需求的代码,这些代码可以让他们拿过来直接使用,而省去了许多精力。 把一些 代码进行打包 ,形成的便是库了。   上面所说,库就是将代码进行

    2024年01月24日
    浏览(45)
  • 【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤

    1、提高开发效率,让开发者所有的函数实现不用从零开始。 2、隐藏源代码。          库其实就是所有的.o文件用特定的方式进行打包形成一个文件,各个.o文件包含了源代码中的机器语言指令。 先将我们的.c文件或者是.cpp文件形成.o文件,指令为: gcc/g++ -c 要形成的.o文

    2024年04月17日
    浏览(45)
  • [Linux]理解文件系统!动静态库详细制作使用!(缓冲区、inode、软硬链接、动静态库)

            hello,大家好,这里是bang___bang_,今天来谈谈的文件系统知识,包含有缓冲区、inode、软硬链接、动静态库。本篇旨在分享记录知识,如有需要,希望能有所帮助。 目录 1️⃣缓冲区 🍙缓冲区的意义 🍙常见缓冲区刷新策略 🍙缓冲区位置猜想 🍥现象猜测 🍥现象解

    2024年02月13日
    浏览(47)
  • 【Linux从入门到精通】动静态库的原理与制作详解

         本篇文章主要是 围绕动静态库的原理与制作进行展开讲解 的。其中涉及到了 inode的概念引入和软硬连接 的讲解。会结合实际操作对这些抽象的概念进行解释,希望会对你有所帮助。 文章目录 一、inode 概念 二、软硬链接 2、1 软连接 2、2 硬链接 三、动静态库概念 3、

    2024年02月12日
    浏览(38)
  • 【嵌入式学习笔记-02】什么是库文件,静态库的制作和使用,动态库的制作和使用,动态库的动态加载

    【嵌入式学习笔记-02】什么是库文件,静态库的制作和使用,动态库的制作和使用,动态库的动态加载 单一模型: 将程序中所有功能全部实现于一个单一的源文件内部。编译时间长,不易于维护和升级不易于协作开发。 分离模型 将程序中的不同功能模块划分到不同的源文件

    2024年01月15日
    浏览(51)
  • 【linux深入剖析】动态库的使用(续) | 动静态库的链接

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 回顾上节,我们在创建了动态库libmymath.so 我们使用指令 gcc main.c -L. -lmymath -L . (-L + 路径表示myc这个库在哪

    2024年04月15日
    浏览(37)
  • Linux中静态库和动态库的使用

    介绍: 库是一个二进制文件,包含的代码可被程序调用 标准C库、数学库、线程库… 库有源码,可下载后编译;也可以直接安装二进制包 位置一般放在:/lib /usr/lib 库的知识 库是事先编译好的,可以复用的代码 在os上运行的程序基本上都要使用库,使用库可以提高开发效率

    2024年01月25日
    浏览(35)
  • 【Linux】Linux编译器 gcc 的使用 | 动静态库的初步认识

    👑作者主页:@安 度 因 🏠学习社区:StackFrame 📖专栏链接:Linux

    2024年01月15日
    浏览(34)
  • 【Linux】动静态库的使用与软链接的结合

    库本质就是把一堆(.o)后缀的文件也就是目标文件整合在一起 静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库 在makefile中 1.第三方库的使用,gcc往后必须加上 -l +库名 2.如果系统中只提供静态链接,则gcc对其进行静态链

    2024年02月05日
    浏览(36)
  • 详解Linux下静态库/动态库的生成和使用(含代码示例和操作流程)&&动态库和静态库的区别

    关于gcc的使用方法可以参考下方链接博客: Linux下详解gcc编译过程(含代码示例) gcc使用教程 库是一种组件技术。 库里封装了数据和函数,提供给用户程序调用。 库只执行到第三阶段编译,没有链接。 库的使用可以使程序模块化,提高程序的编译速度,实现代码复用。

    2024年02月15日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包