范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

静态链接与动态链接(Linux)

  前言
  上一篇分享了静态链接与动态链接的实验(Windows下)。这一篇分享Linux下的笔记,同时对上一篇笔记做一个补充。
  首先,我们把静态链接与动态链接做一个这样子的比喻:
  把链接过程看做我们平时学习时做笔记的过程。我们平时学习时准备一本笔记本专门记录我们的学习笔记,比如在某本书的某一页上看到一个很好很有用的知识,这时候我们有两种方法记录在我们的笔记本上,一种是直接把那一页的内容全部抄写一遍到笔记本上(静态链接);另一种是我们在笔记本上做个简单的记录(动态链接),比如写上:xxx知识点在《xxx》的xxx页。
  从这两种方法中我们可以很清楚地知道两种方式的特点,第一种方式的优点就是我们在复习的时候就很方便,不用翻阅其它书籍了,但是缺点也很明显,就是占用笔记本的空间很多,这种方法很快就把我们的笔记本给写满了。第二种方式的优点就是很省空间,缺点就是每当我们复习的时候,手头上必须备着相关的参考书籍,比如我们去教室复习的时候,就得背着一大摞书去复习,这样我们复习的效率可能就没有那么高了。
  这对应到我们的动态链接与静态链接上是不是就很好理解了:
  静态链接与动态链接的主要优缺点
  (1)静态链接的优缺点:
  优点:代码装载速度快,执行速度略比动态链接库快;
  缺点:使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费。
  (2)动态链接的优缺点:
  优点:生成的可执行文件较静态链接生成的可执行文件小;
  缺点:速度比静态链接慢;
  动态、静态链接实验
  我们先编写如下代码(共三个文件):
  文件1(main.c):#include "test.h" ​ void print_hello(void) {     printf("hello world "); }
  文件2(test.c):#ifndef __TEST_H #define __TEST_H ​ #include  ​ void print_hello(void); ​ #endif
  文件3(test.h):#ifndef __TEST_H #define __TEST_H  #include   void print_hello(void);  #endif
  1、动态链接实验
  首先,将源文件生成目标文件(*.o),命令:gcc -c -fPIC main.c test.c
  这里得根据实际编译环境加上或者不加上-fPIC参数,这个是与gcc的版本有关,像我这边的gcc 5.4.0就得显示加上-fPIC这个参数,若是不加,则会影响下一步的链接过程。
  在Linux中,动态库的扩展名一般为.so。针对上面生成的test.o文件,生成动态库的命令为:gcc -shared test.o -o libtest_d.so
  若是上一步不加-fPIC参数,则会产生如下错误:
  大概意思就是.rodata不可以拿来制作共享文件,请加上-fPIC参数重新编译。问题分析:
  -fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。
  从gcc来看,shared应该是包含fPIC选项的,但似乎不是所有的版本都支持,所以最好显式加上fPIC选项。
  使用链接动态库的方式生成可执行程序,命令:gcc main.o -L. -ltest_d -o test_d.out
  这里的-L.的含义是在搜索库文件时包含当前目录,-ltest_d的含义是链接名称为libtest_d.so的动态链接库。
  下面运行test_d.out程序,发现出现如下错误:
  不能找到共享库文件libtest_d.so,加载失败。因为一般情况下Linux会在/usr/lib路径中搜索需要用到的库,而libtest_d.so库并不在这个路径下。解决方法有两种:一种就是把这个文件拷贝至/usr/lib路径下,但是一般不允许这样做,一般用户也不允许往这个路径里拷贝东西。另一种就是把当前路径增加为动态库的搜索路径,命令为:export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH
  这时候就可以正常运行了:
  2、静态链接实验
  静态库用ar工具来制作。ar是一个归档工具,用于建立、修改、提取归档文件(archive)。一个归档文件可以包含多个目标文件,也被称为静态库。在Linux下,静态库的扩展名一般为.a。
  把目标文件test.o做成静态库,命令:ar -rv libtest_s.a test.o
  其中rv参数为组合参数,其中r参数表示当建立的模块名已经存在时,则覆盖同名模块,v参数用来显示附加信息,比如被处理的文件的名字。
  使用链接静态库的方法生成可执行程序,命令:gcc main.o -L. -ltest_s -o test_s.out
  运行程序:
  删除静态库之后,可执行程序也是能正常运行的。事实上,使用链接静态库的方式生成的可执行程序与直接使用目标文件生成的可执行程序没有区别。只是经过了静态库的链接,变为了一个文件,方便于调用、移植和保存。
  归档工具ar可以很方便地查看和删除归档文件中的成员。
  查看静态库libtest_s.a中的内容,命令:
  关于ar工具更多的命令参数可输入ar --help进行查看:
  以上就是关于静态链接与动态链接的Linux笔记,如有错误,欢迎指出!

男友家境远不及我,还要补贴原生家庭买房,我该如何应对不吃亏?我是小透明男朋友家境不好的话还要继续谈下去吗?我跟我男朋友是大学的同学,到现在为止也谈了5个年头了。我先说一下自己的情况,家里在一线城市和二线城市都有一套房产,无贷款,本科学历,目父母有这四种行为不仅是溺爱也是对孩子的伤害有题主问孩子的成长是不是就是需要磕磕绊绊的呢,如果家长过分的溺爱孩子的话会有什么影响呢?你好!我是心融有道平台的Lisa。溺爱是照顾者和儿童之间的关系的一种特征,溺爱即不公正的物质痛心!爸爸举高高将儿子摔进ICU,医生都只能无奈摇头童年的回忆总是很美好的,很多家长喜欢拉着孩子的手荡秋千,也有人喜欢把孩子举高高,因为这样能够逗孩子笑。而很多人并不知道,举高高是很危险的事情,最近有一个婴儿被爸爸举高高然后摔到地上特朗普对脸书推特和YouTube社交媒体巨头提起诉讼据美国彭博社报道,美国前总统特朗普当地时间10月1日要求美国佛罗里达州迈阿密一名联邦法官强迫社交媒体平台推特公司恢复自己的推特账号。彭博社报道截图报道称,特朗普的律师在一份文件中指迷惑发言?杜发文称姚策不像她,网友两人简直一个模子印出来最近,熊磊的儿子楷楷过生日,奶奶杜新枝也献上了祝福,同时她也在平台发布了文章,内容让人惊叹不已。她表示自己的儿子姚策跟自己不像,像自己的女儿。这话一说出,网友坐不住了,天下哪有这样熊磊刚开网店就开始刷单?怪不得之前跟北海舅舅闹矛盾如果从事过电商行业的人,一定对刷单的词汇不陌生。而现在,熊磊的网店才刚开张,就被人曝光进行了刷单操作,根本就没有这么多订单。网友感叹,当初熊磊是多么嚣张,现在却是这个下场。有人在熊上海长宁独居女孩遭杀害被藏行李箱后抛尸,更多案发细节曝光继江西吉安市女孩遭上司杀害,尸体藏于行李箱后抛尸,近日上海长宁又发生一起行李箱藏尸案,一名独居女孩被杀害后,遭到嫌疑人将尸体藏于行李箱,并将其运走抛弃。目前,视频中拉着行李箱走出小上海一小区加装电梯,一楼住户竟毫不知情谁给我签的名?随着电梯房越来越受欢迎,老旧小区的改造也跟随着潮流的脚步,为了楼梯房住户出行更加的便捷,老小区安装外部电梯有不少的补贴,这对于住在稍微高楼层的住户来说简直不要太好,但要真的是实行起抠门女子毕业9年买两套房从小母亲把零花钱扔在地上,让她捡时下,楼价趋向稳定的阶段,但买房子并不是说买就能买,尤其对于大部分年轻人来说,这几乎是一件遥不可及事情,但对于南京一名32岁的女子来说,这并不是件困难的事情。毕业9年的她靠着抠,在杜新枝是无辜的?金果儿许敏哥哥找到了偷孩子的人,不是她金果儿事件一出,人们都震惊了!这个年代竟然还有地头蛇,还是这么嚣张!如果金果儿没有人给她撑腰,相信是不会这么无法无天的。而这次,她给出了一个惊人的消息,那就是许敏的哥哥已经找到了偷13岁女孩失联多天,母亲跪在男方家门口痛哭求你把女儿还我对于父母而言,孩子的事永远都是天大的事,父母都害怕自己的子女在成长过程中遭到意外,但子女大了不由娘,孩子长大了自然会有自己的自主意识,叛逆的心理就此萌发,这是父母最为担心受怕的,就
买个耳机1720元,修一下按钮1200元。真黑冲着降噪耳机的感觉,前二年在网上买了一个QC30的耳机,平时不常用,偶尔乘个高铁飞机时用用。开关的橡胶按钮在使用过程中,慢慢有老化,手指甲一按就凹下去一个,按多了就烂了。今天打了官BoseQC45降噪耳机国行开卖小米之家或开启二手房业务科技犬今日,这款产品正式在中国大陆地区发售,提供黑色雾白可选,售价均为2299元。这款耳机继承了上一代BoseQC35系列的外观雾面磨砂质感的外壳更加简约时尚,同时底部的充电口变为耳机还能当充电宝,极简主义不二之选南卡N2S真无线蓝牙耳机购买理由随着消费观念的转变,我越发喜欢更实用的生活方式,就是极简!从前出门的背包里放满了东西,不仅是负重的问题,而且用的时候也要翻翻找找,很是麻烦,现在则是能省则省,简简单单的几样各位看过来,能哄你入眠的南卡Zzzz骨传导蓝牙音箱开头相信很多人和我一样,晚上习惯边听广播边睡觉。为了不吵到身边的人,经常戴着耳机就进入了梦乡,时间长了对耳朵伤害很大。但,没了广播久久不能进入睡眠状态,所以,就算伤害耳朵也仍旧会依十一出行必备装备推荐,TWS无线耳机首选华为FreeBuds系列十一长假就要来临了,朋友们是不是已经制定好了自己的出行计划了呢?虽然出去玩玩确实能够起到非常不错的放松心情的目的,但是枯燥的旅途难免会破坏少许我们出行的美丽心情,如何才能打发掉旅途phone13无法用AppleWatch解锁苹果今天表示将修复苹果公司今天表示,之前阻止一些iPhone13用户使用AppleWatch解锁功能的问题将在即将到来的软件更新中得到修复。在一份支持文件中,苹果公司表示,受影响的用户暂时可以关闭用想买无线吸尘器,却在纠结牌子?多维度选购指南对于当代的年轻人和时尚宝妈们来说,无线吸尘器作为一种非常优秀的小家电,能够极大程度地提升自己在家中清洁卫生的效率。相比较传统的扫把来说,无线吸尘器能够以任意的角度和姿势去清洁平日里iPhone13系列无法使用AppleWatch解锁怎么办相关解决方法越来越多用户拿到新iPhone随之也爆出了一些新的bug,其中就有无法使用AppleWatch来进行解锁,下面就分享相关的解决方法给大家。戴着口罩时通过AppleWatch解锁iP爱奇艺奇遇3评测连接元宇宙从一台小小的VR设备开始元宇宙源于美国著名的赛伯朋克流科幻作家尼尔史蒂芬森的作品雪崩中Metaverse一词,在元宇宙中可以对未来世界进行天马行空的畅想大家可以拥有自己的虚拟身份和数字资产,可以在虚拟世界电热水器,性价比高,热水量大,为什么却很少人买?来听听大实话热水器,是我们每个家庭非买不可的电器,不过,热水器的款式和种类并不单一,不同的家庭会有不同的选择。其中,让人争议最大的,肯定要数电热水器的取舍问题了,有人说电热水器好用,也有人说电对不起了阿里云,这是暂时唯一支持阿里云所有文件分享的方法今天要给朋友分享下阿里云盘的文件,才发现居然不支持分享。分享即可文件都显示不支持。作为一款不限速的良心网盘,虽然最近才全面开放了分享功能,但不是所有文件都支持分享。据官方回应仅支持