首页 > 系统相关 >找到一个linux静态库动态库的好资料.2

找到一个linux静态库动态库的好资料.2

时间:2024-12-29 19:54:47浏览次数:7  
标签:文件 静态 HOWTO libraries linux 共享 动态

# 正文

继续整理从这个页面学到的东西:https://tldp.org/HOWTO/Program-Library-HOWTO
这一篇主要参考这俩:
https://tldp.org/HOWTO/Program-Library-HOWTO/introduction.html
https://tldp.org/HOWTO/Program-Library-HOWTO/static-libraries.html

这个资料主要讨论“库”,即program library。那什么叫“库”?就是一个包含了已编译代码的、可以被其它程序包含的文件。原文曰:A ``program library'' is simply a file containing compiled code (and data) that is to be incorporated later into a program。“库”有三种,静态库、共享库、动态库,对应的原文是static libraries,shared libraries,and dynamically loaded (DL) libraries。我还没能查到这三个词在中文资料里的规范叫法是什么,也不想查,因为感觉“静态库”、“共享库”、“动态库”已经足够清晰了,所以下文就用这三个说法了,加不加双引号反正都是这三个意思。为何要强调这一点呢,因为发现若干网文并不严格区分“共享库”与“动态库”,经常索性一个“动态库”了事,这很让人困惑的,我还专门问过文心一言(尾注1)。。算了不吐槽了,因为我自己写的也强不多点,唯一让我自我感觉良好一点的,就是我总会贴出来原始资料链接。

静态库是编译可执行文件时就被包含进去了的;共享库是程序启动时就加载;动态库是程序运行时、执行到需要库函数时候才加载。严格来说,“动态库”的库文件格式没有什么不同,因为静态库和共享库的库文件都可以作为动态库使用;不同的只限于编程时对库文件的用法。使用动态库时,编程要麻烦一些,而且,若干程序完全不需要动态库的优点;使用静态库时,一旦库升级了,就得重新编译可执行程序;当然,它们还是各有优势。

原文作者提醒了这个事情:共享库在有的地方被叫做 dynamically linked libraries,缩写也是DLL,我想这大概是中文资料里经常只说“静态库”和“动态库”的原因,想来美国人阅读某些资料可能也是和我们有一样的困惑:中文里动态库有“共享”和“动态”两个意思,英文的DLL也是如此这般,好吧,我心理平衡了一点儿。

静态库就是一个对象文件的集合,一般以.a结尾,使用ar命令创建。
静态库早于共享库出现,现在不如之前那么使用广泛了,但有时也用。
静态库有个好处就是,制作成静态库的这一部分代码可以不用总是重新编译,这样可以节省编译时间;不过现在的编译器速度都很快,所以这个优势就不那么明显了。
还有个好处就是,可以让别的用户使用库文件却无需提供源码,这对付费软件发布者很方便,但对使用者不太方便。
理论上,使用静态库比使用共享库或动态库快一点(1%-5%),但现实中这点差异无足轻重。

想把目标文件file1.o和file2.o打包成静态库mylib.a,使用命令ar rcs mylib.a file1.o file2.o就可以了。使用静态库的简单示例在《找到一个linux静态库动态库的好资料.1》里有一个,不再说了。原作者这里单独强调了一个事情,就是gcc的-l选项要放到要编译的文件后边,原文是:the -l option is a linker option, and thus needs to be placed AFTER the name of the file to be compiled),不过,文章是2003年4月写的,现在GCC(1)的man page上-l选项也没说这个,看来这已经成为历史了。
GCC(1)的man page上对-l选项的说明

要不说一下上边的那个ar(1)命令吧,因为之前项目上编静态库都是只使用rc选项,看一眼都是啥意思。它有manual page:

看来就是个类似tar的打包工具,只是常用来打包库文件。它可以使用s选项给创建的库文件加索引,链接到有索引的库文件时速度更快;有了索引,库里面的例程还可以相互调用:


c就是create归档文件的意思,和tar的-c类似:

r选项就是把.o对象文件加入到归档文件的意思:

好了就这些吧,其实原文也没说多少,呶:

# 尾注

尾注1

标签:文件,静态,HOWTO,libraries,linux,共享,动态
From: https://blog.csdn.net/weixin_42988262/article/details/144723756

相关文章

  • RecyclerView动态添加item背景
    本意是解决RecyclerView动态添加背景后item高度不正确的bug。一开始以为是RecyclerView的问题,后来发现是background.xml多加了padding。把背景xml的padding删掉后就正常了。但demo写都写了存一下吧。需求:根据item在RecyclerView的不同位置添加不同背景。解:给RecyclerView写一个a......
  • Linux shell 提取 html网页中table表格内容
    前言全局说明一、说明1.1环境:Windows11家庭版23H222631.3737Python3.8.10(tags/v3.8.10:3d8993a,May32021,11:48:03)[MSCv.192864bit(AMD64)]onwin32Windows7旗舰版VisualStudio2013Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18......
  • Linux1-入门及VM,centos安装
    1,重点linux系统简介及特点下载安装开关机2,具体内容2.1linux系统简介:Linux内核最初只是由芬兰人林纳斯·托瓦兹(LinusTorvalds)在赫尔辛基大学上学时(22岁)出于个人爱好而编写的。softwarelikesex;It`sbetterwhenit`sfree;......
  • 【C++动态规划】1105. 填充书架|2104
    本文涉及知识点下载及打开打包代码的方法兼述单元测试C++动态规划LeetCode1105.填充书架给定一个数组books,其中books[i]=[thicknessi,heighti]表示第i本书的厚度和高度。你也会得到一个整数shelfWidth。按顺序将这些书摆放到总宽度为shelfWidth的书架上......
  • 一文读懂 Linux 磁盘使用情况查看
    一文读懂Linux磁盘使用情况查看在Linux系统管理与运维工作中,时刻掌握磁盘的使用状况对保障系统稳定运行、提前规划存储扩容至关重要。Linux提供了丰富且功能各异的工具,用于查看磁盘使用详情,本文将深入介绍这些实用工具,并结合实际操作示例,助力大家轻松驾驭磁盘管理工作......
  • 熟悉常用的Linux操作和Hadoop操作
    熟悉常用的Linux操作和Hadoop操作1.实验目的Hadoop运行在Linux系统上,因此,需要学习实践一些常用的Linux命令。本实验旨在熟悉常用的Linux操作和Hadoop操作,为顺利开展后续其他实验奠定基础。2.实验平台(1)操作系统:Linux(建议Ubuntu16.04或Ubuntu18.04);(2)Hadoop版本:3.1.3。3.实验步......
  • Linux中vim常用命令和技巧(超详细保姆级教程)(六)
    最近被要求改用vim写代码,感觉自己的一些操作非常笨拙,完全浪费了vim的强大功能,下定决心从头学习vim的各种操作和技巧,顺便把学到的内容整理出来,内容持续更新中,包括各种基础操作和一些提高生产力的小技巧,适合和我一样刚接触vim或者想要系统练习vim操作的友友们,一起成为vim高手!(一)V......
  • linux网络 | 深度学习http的相关概念
        前言:本节内容讲述http。本节主要讲述http的一些相关概念,见一见的http的样子。在文章中,博主将先会重新回忆一下OSI的七层模型。然后讲两个前置知识。最后就是带着友友见一见http的格式。做完这些,本节内容就算是圆满结束。而后面的章节还会带着友友们模拟ht......
  • 2024-12-25《linux上安装redis报错》
     在linux上安装redis时,首先要安装c/c++编译器,然后安装redis,不然redis跑不了,安装时报错:cdsrc&&makeallmake[1]:Enteringdirectory'/opt/redis-7.0.0/src'CCMakefile.depCCserver.oInfileincludedfromserver.c:30:server.h:57:10:fatalerror:systemd......
  • Linux宝塔界面登录不上,提示密码错误
    您好,关于您反馈的Linux宝塔面板无法登录且提示密码错误的问题,这里为您详细介绍可能的原因及解决方案。一、重置宝塔面板密码如果您忘记了宝塔面板的初始密码,可以通过以下方法重置密码:参考官方教程:访问(网址)查看详细的重置步骤。通常包括通过SSH登录服务器,执行特定命令来修改......