游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

技术分享Linux系统中的库

  大家好,我是阿木实验室的松溪,今天给大家介绍一下,Linux系统中,库的概念。
  一、库的简介
  什么是库,库简单地说,就是模块。用于提供不同功能的模块,比如我们经常会用的ceres库,eigen库,pcl库等等。库从本质上来说,是一种可以执行代码的二进制形式,可以被载入到内存中使用,在Liunx系统中,库以文件的形式存在,并且可以分为动态链接库和静态链接库两种,简称为动态库和静态库。其中,静态库文件的后缀为。a,动态库文件的后缀为。so。无论是动态库还是静态库,它们无非是向调用的人提供变量、函数或者类。
  二、库的区别
  静态库和动态库的区别在于:二者代码被载入的时刻不同。静态库在程序编译的时候会被链接到目标代码中,目标程序运行的时候将不再需要该库,移植方便,但是体积会变大,浪费空间和资源,因为与之相关的所有文件都会链接合成一个可执行文件,导致可执行文件的体积变大。动态库在程序编译的时候并不会被链接到目标代码中,而是在程序运行的时候才被载入,因此可执行文件体积较小。
  基本上,大部分的库都是动态库,比如:eigen,ceres等,这就是我们通常所说的依赖项,如果你的程序中有需要某个库,而你的环境中没有这样的库,那么在编译的时候就会出现这样的错误:xxxx。h文件未找到。这就是典型的缺少动态库的bug。对此,只需要安装对应的动态库即可解决。这个问题经常出现在当你clone某一个代码下来,但是却没有这个代码的运行环境,当你编译的时候,就会出现上面的报错。是不是又get到了一个小技巧呢?
  三、静态库的创建和使用
  在Linux系统中创建静态库的过程如下:
  1。编辑源文件(。c或。cpp文件)
  2。通过gcccxxx。c或gcxxx。cpp生成目标文件(。o文件)
  3。使用ar命令归档目标文件,生成静态库
  4。配合静态库写一个头文件,文件里的内容就是提供给调用者使用的函数、变量或者类的声明。
  在实际创建之前,有必要了解一下,ar命令的使用。ar命令不但可以创建静态库,也可以修改或提取已有静态库中的信息,其基本用法如下:
  ar〔option〕libxxx。axx1。oxx2。oxx3。o
  其中,libxxx。a是生成静态库的文件名字,xxx是自己设定的名称,lib表示该文件是一个库,所有在Linux下的库,都遵守这种命名。即libxxx。a或者libxxx。so。xx1。oxx2。o为静态库的目标代码文件,可以有多个。option常见的选项如下:
  c:创建一个库,无论库是否存在,都会创建
  s:创建目标文件索引
  r:在库中插入模块,如插入的模块名已经在库中存在,则将会替换。如果有一个模块不存在,将会保存,并不会替换其他同名模块
  t:显示库文件中有哪些目标文件。仅仅显示
  tv:显示库文件有哪些目标文件。包括文件名、时间、大小等
  s:显示静态库文件中的索引表
  下面将讲解如何创建和使用一个静态库
  新建一个源文件,test。cpp,复制以下代码:includeiostreamvoidshowage(intage){std::coutYourageis:agestd::endl;}
  然后输入命令gctest。cpparrcslibshowage。atest。o
  这样就生成了一个静态库,要想使用,需要编写另一个源文件,demo。cpp。复制以下代码includeiostreamexternvoidshowage(intage);声明要使用的函数intmain(intargc,charargv){showage(18);std::coutHistd::endl;}
  CMakeLists。txt文件cmakeminimumrequired(VERSION3。0)project(demo)addexecutable(demodemo。cpp)targetlinklibraries(demoL。。lshowage)
  其中,L参数表示从什么地方找这个库,(。。)表示上一级目录。l指定具体的库,其中lib和。a不需要显示写出,编译器会自动去寻找libshowage。a这个文件。这也就是为什么库命名的时候要以lib开头。
  四、动态库的创建和使用
  在Linux系统中,存放动态库的路径一般为usrlib。在Linux系统下进行的链接,默认是先链接动态库,如果同时存在静态库和动态库,如果不特别指出,将与动态库链接。这样有助于节省空间。
  同理,我们创建一个动态库,test。cpp。代码同上,不做改变。只需要修改生成动态库的命令。该命令如下:gtest。cppfPICsharedolibshowage。so
  shared表示生成共享库
  fPIC表明使用地址无关代码。PIC全称是PositionIndependentCode。在Linux系统下编译共享库时,必须加上这个参数,否则在链接的时候将会报错。因为共享库文件可能会被不同的进程加载到不同的位置上,如果共享对象中的指令使用了绝对地址、外部模块地址等,那么该库在被加载的时候,就需要修改地址,这样就不能实现多进程共享一份物理内存。
  编写一个调用该库的函数,demo。cpp。内容还是不变。CMakeLists。txt也不变。
  五、多个文件生成一个动态库
  创建test1。cpp文件,复制以下代码includeiostreamvoidshowage1(intage){std::coutThisislib1:agestd::endl;}
  创建test2。cpp文件,复制以下代码includeiostreamvoidshowage2(intage){std::coutThisislib2:agestd::endl;}
  创建动态库gtest1。cpptest2。cppfPICsharedolibshowage。so
  需要说明的是,多个文件创建动态库的时候,不能有同名的函数、类、变量的声明,否则将无法创建,因为就算创建成功以后,当调用的时候,编译器并不知道该去调用哪一个源文件里面的声明。
  创建main。cpp文件,使用这个库,复制以下代码includeiostream声明要使用的函数externvoidshowage1(intage);externvoidshowage2(intage);intmain(intargc,charargv){showage1(18);showage2(36);}
  CMakeLists。txt文件如下cmakeminimumrequired(VERSION3。0)project(demo)addexecutable(mainmain。cpp)targetlinklibraries(mainL。。lshowage)
  当我们运行的时候,会发现这样的错误。main:errorwhileloadingsharedlibraries:libshowage。so:cannotopensharedobjectfile:Nosuchfileordirectory
  在编译的时候,我们告诉了编译器,在什么地方去寻找该库,但是在运行的时候,由于该库是动态库,其代码没有被链接到目标代码中,因此,在运行的时候,会提示找不到该库。
  因此,只需要将动态库放到默认的路径上或者告诉其指定路径即可。
  在Linux系统中,一般将库放在以下三个地方。其中,lib用于放置系统级别(或者说内核级别)的库文件,usrlib用于放置程序级别的库文件,usrlocallib为用户级别,一般用户编译的都放在这里,以及源码编译安装,例如:opencv的源码编译。
  因此,我们要将自己的库放在usrlocallib下,输入以下命令sudocpCdemolibshowage。sousrlocallib
  当我们移动以后,需要输入以下命令(必须),更新sudoldconfig
  这样,当我们再次运行的时候,就不会报错了。切记,每次有动态库在上述目录中发生变动,都需要输入这个命令更新,否则还是无法识别。
  六、通过apt安装缺少的动态库
  当我们从github上clone代码的时候,在编译的时候,经常出现xxx。h文件不存在,或者Nosuchfileordirectory。其本质上就是你的环境和别人的环境不一致,缺少相应的库。一般的解决方式是,将该缺少的头文件复制到百度,查一查这个头文件是来自哪一个库。然后打开终端,输入命令sudoaptinstalllibxxxdev
  即可
  如果是自定义的动态库,一般在readme文档中有说明。
  同理,当你向开源社区贡献开源代码的同时,也请务必告知运行的环境以及所需要的库。
  七、总结
  相信通过本文的介绍,读者对库有了一个简单的认识,在以后的工作和学习过程中,遇到类似的问题,也有了解决问题的思路和方法。
  阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!
  End
  技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

比亚迪官方宣布将对旗下宋Pro车型进行OTA升级日前,比亚迪官方宣布将对旗下宋Pro(参数询价)车型进行OTA升级,在对现有的系统主题、智能语音功能进行优化外,增加了千里眼、百度地图汽车版等新功能。据了解,本次OTA升级将以……银弹谷带你看2020中国低代码平台指数测评报告现在我们来看看来自T研究的2020中国低代码平台指数测评报告说了什么?(分析师:吴勇、邳佳琦),整个报告分成五大方面:核心观点、市场指数、用户指数、品牌指数、发展趋势。核……马斯克又赢了美国法院裁定蓝色起源诉NASASpaceX案败诉财联社(上海,编辑史正丞)讯,当地时间周四,美国联邦索赔法院就贝索斯旗下蓝色起源起诉NASA和SpaceX案作出判决,驳回原告诉讼请求。随后贝索斯也宣布接受判决结果,为全球前两……iPhone13被提前发布,这次完胜iPhone12?每年秋季苹果的发布会,都是一场科技界的盛会。然而在苹果发布每一款旗舰产品之前,网络上都会出现大量的爆料,其中被业内认可度最高的莫过老郭,每次爆料正确度基本八九不离十。想起去年还……全年营收增五成,市值却蒸发逾2000亿,这家芯片巨头怎么了?文杨剑勇当信息科技发展向人工智能、物联网转变后,半导体厂商迎来新一轮市场机遇。诸如包括谷歌、微软等科技巨头积极发展人工智能技术,均依赖于英伟达GPU方案来训练人工智能系统……从专利数量看全球最具创新力的50家公司资本实验室今日创新观察聚焦前沿科技创新与传统产业升级张珂专利,在很大程度上不仅代表着一家企业的技术实力,也代表着一个国家的长期发展潜力。很多机构也习惯用专利数……智能连接5G与人工智能物联网等技术的超级融合资本实验室今日创新观察聚焦前沿科技创新与传统产业升级李鑫随着新技术的成熟,新型的、先进的应用将来自5G、人工智能(AI)和物联网(IoT)的融合。这种融合将创……抚州五菱荣光新卡让利促销,购车优惠0。15万元,欢迎垂询今天给大家推荐一款车:它就是五菱荣光新卡,特别适合日常使用,据悉:五菱汽车抚州国鼎销售中心店即日起到10月31日限时回馈用户,最高优惠3。01,对五菱荣光新卡感兴趣的朋友不妨亲……手把手教你如何取得客户的信任废话不多说,切入主题:永远不要在客户面前表露出你需要这个订单的焦虑,功利心太强,会给客户增加压迫感。不管是B2B还是B2C,其实最终还是H2H。HUMANTOHUMAN。……翼联EDUP4G路由为什么突然在柬埔寨大卖?很多人来到柬埔寨旅游,给大家的第一印象就是柬埔寨是个古老而又神奇的国度,历史文物古迹非常多,那么想要去柬埔寨旅游拍照留下做纪念的人当然也非常多!图片来自网络但是让很……音画俱佳的极米极光RSPro投影仪于我而言,投影仪这个名词,首先会让我想到的,并非公司开会或者品牌发布产品时用的那种商务范的投影仪;更不是各种专业领域的投影设施。而是一部老电影《天堂电影院》。是的,投影设……东风风神AX7马赫版,全系1。5T发动机,起售价9。59万马赫是什么意思?它是一个速度的单位,1马赫代表了1倍音速,当马赫用到汽车上,你可以理解为超快的速度!如果这辆车,再搭配了炫酷的外观,更能吸引年轻消费者的关注,今天笔者要说的就是……
天猫店如何做账,支付宝提现走公账,不开发票,无进项票?天猫店主一般都是有营业执照的正规店家,如果店主想要开好店,长久良性经营,就要做到帐目清晰,按规定进行纳税申报。我们可以从以下几个维度来理解。一、根据征收管理法的规定和相关……拼多多百亿补贴上架iPhone13系列领券直降500元今日拼多多平台百亿补贴活动正式公布了苹果iPhone13系列的补贴价格。据拼多多百亿补贴活动显示,iPhone13mini、iPhone13、iPhone13Pro、iPhon……努比亚12GB版红魔6游戏手机,已降到4199元5050mA众所周知,努比亚的红魔游戏手机非常出名。比如红魔6游戏手机,该机搭载了高通骁龙888旗舰处理器,配备了12GB256GB顶级存储版本。目前其顶配版已经开始进行降价处理,可以考虑……华为Mate50系列再爆新形象!镜头设计被大改,亿万花粉爱了哈喽,您好!我是原呵呵,点点关注吧,更多精彩内容等着您华为Mate50系列迎来了好消息,那就是它即将获得增援。尽管受到强敌的阻挠,华为还是勇敢地迎难而上,并正在努力开发新……你看过最感动的文字片段是?这些精典文字片段,不仅仅是感动,而且振聋发瞆,使人受益,很高次与你分享:1以积货财之心积学问,以求功名之心求道德,以爱妻子之心爱父母,以保爵位之心保国家。2古今来许……8月中端手机性能排行榜荣耀50排名第三从短袖到外套,人们的衣着变化,意味着天气逐渐寒冷,今年的夏天来到了尾声。可是对于手机市场来说,下半年的热度才是刚刚开场,即将迎来金九银十。在这期间,以年份为更新频率的苹果,会推……GoWeb编程实战(1)Go语言的基础语法前言很高兴能够一起和大家学习Go语言,对于它的场景其实很多,包括云计算、容器虚拟化、分布式存储、网络爬虫、运维开发、Web开发、服务端开发、区块链、IoT等领域都有所应用……续航榜榜首依旧是特斯拉,小鹏P7跌至第四2021年5月纯电车续航里程排名由于四月上海车展的缘故,5月新出的电动车并不多,部分改款的电动车也仅是更新了年款,续航并没有改变。所以本期统计的184款电动车,仅有三款是……平台封禁行为的违法性判断思路FTC诉Facebook案评析文刘晓春中国社会科学院大学互联网法治研究中心执行主任社交平台Facebook近年来在多国引发反垄断执法和司法的关注,而美国联邦贸易委员会(以下简称FTC)和纽约州等48州……摩托罗拉官网上新中端旗舰,Q萌大眼睛惹人心动!首发价20994月5日消息,摩托罗拉中国官网上架了一款新旗舰MotorolaG7Plus,定位为一款中端旗舰。MotorolaG7Plus的颜色有中国红和深海蓝两种可选,存储方面共有4128……宇宙四种粒子,寻找思维和记忆形成方式生命的特征,从外形可见是对称的,而这种对称结构,可以更好的进行光子对撞,形成快子和空间粒子。生命起初,脑海是一团黑暗物质和空间粒子的混合体。当外界光子进入脑海,因为……出货周期缩短到两三天,线上爆单倒逼工厂快起来从线下到线上,从传统门店揽客到电商平台多元分销,传统制造业的源头厂家们迎来了商机,同时也意味着工厂的运营理念需要不断革新。9月4日,为期三天的第58届中国(广州)国际美博……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网