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

技术分享Linux系统中的库

  大家好,我是阿木实验室的松溪,今天给大家介绍一下,Linux系统中,库的概念。
  一、库的简介
  什么是库,库简单地说,就是模块。用于提供不同功能的模块,比如我们经常会用的ceres库,eigen库,pcl库等等。库从本质上来说, 是一种可以执行代码的二进制形式,可以被载入到内存中使用 ,在Liunx系统中,库以文件的形式存在,并且可以分为 动态链接库 和 静态链接库 两种,简称为动态库和静态库。其中, 静态库文件的后缀为.a,动态库文件的后缀为.so 。无论是动态库还是静态库,它们无非是向调用的人提供变量、函数或者类。
  二、库的区别
  静态库和动态库的区别在于: 二者代码被载入的时刻不同 。静态库在程序编译的时候会被链接到目标代码中,目标程序运行的时候将不再需要该库,移植方便,但是体积会变大,浪费空间和资源,因为与之相关的所有文件都会链接合成一个可执行文件,导致可执行文件的体积变大。动态库在程序编译的时候并不会被链接到目标代码中,而是在程序运行的时候才被载入,因此可执行文件体积较小。
  基本上,大部分的库都是动态库,比如:eigen,ceres等,这就是我们通常所说的 依赖项 ,如果你的程序中有需要某个库,而你的环境中没有这样的库,那么在编译的时候就会出现这样的错误: xxxx.h文件未找到 。这就是典型的缺少动态库的bug。对此,只需要安装对应的动态库即可解决。这个问题经常出现在当你clone某一个代码下来,但是却没有这个代码的运行环境,当你编译的时候,就会出现上面的报错。是不是又get到了一个小技巧呢?
  三、静态库的创建和使用
  在Linux系统中创建静态库的过程如下:
  1. 编辑源文件(.c或.cpp文件)
  2. 通过 gcc -c xxx.c 或 g++ -c xxx.cpp 生成目标文件(.o文件)
  3. 使用 ar 命令归档目标文件,生成静态库
  4. 配合静态库写一个头文件,文件里的内容就是提供给调用者使用的函数、变量或者类的声明。
  在实际创建之前,有必要了解一下,ar命令的使用。ar命令不但可以创建静态库,也可以修改或提取已有静态库中的信息,其基本用法如下:
  ar [option] libxxx.a xx1.o xx2.o xx3.o
  其中,libxxx.a是生成静态库的文件名字,xxx是自己设定的名称, lib表示该文件是一个库,所有在Linux下的库,都遵守这种命名。即libxxx.a或者libxxx.so 。xx1.o xx2.o为静态库的目标代码文件,可以有多个。option常见的选项如下:
  -c:创建一个库,无论库是否存在,都会创建
  -s:创建目标文件索引
  -r:在库中插入模块,如插入的模块名已经在库中存在,则将会替换。如果有一个模块不存在,将会保存,并不会替换其他同名模块
  -t:显示库文件中有哪些目标文件。仅仅显示
  -tv:显示库文件有哪些目标文件。包括文件名、时间、大小等
  -s:显示静态库文件中的索引表
  下面将讲解如何创建和使用一个静态库
  新建一个源文件,test.cpp,复制以下代码:  #include   void show_age(int age) {  std::cout << "Your age is: " << age << std::endl;  }
  然后输入命令  g++ -c test.cpp ar rcs libshowage.a test.o
  这样就生成了一个静态库,要想使用,需要编写另一个源文件,demo.cpp。复制以下代码  #include   extern void show_age(int age);  //声明要使用的函数  int main(int argc, char** argv) {   show_age(18);   std::cout << "Hi" << std::endl; }
  CMakeLists.txt文件  cmake_minimum_required(VERSION 3.0) project(demo)  add_executable(demo demo.cpp) target_link_libraries(demo -L.. -lshowage)
  其中,-L参数表示从什么地方找这个库,(..)表示上一级目录。-l指定具体的库,其中lib和.a不需要显示写出,编译器会自动去寻找libshowage.a这个文件。这也就是为什么库命名的时候要以lib开头。
  四、动态库的创建和使用
  在Linux系统中,存放动态库的路径一般为/usr/lib。在Linux系统下进行的链接,默认是先链接动态库,如果同时存在静态库和动态库,如果不特别指出,将与动态库链接。这样有助于节省空间。
  同理,我们创建一个动态库,test.cpp。代码同上,不做改变。只需要修改生成动态库的命令。该命令如下:  g++ test.cpp -fPIC -shared -o libshowage.so
  -shared 表示生成共享库
  -fPIC表明使用地址无关代码。PIC全称是Position Independent Code。在Linux系统下编译共享库时,必须加上这个参数,否则在链接的时候将会报错。因为共享库文件可能会被不同的进程加载到不同的位置上,如果共享对象中的指令使用了绝对地址、外部模块地址等,那么该库在被加载的时候,就需要修改地址,这样就不能实现多进程共享一份物理内存。
  编写一个调用该库的函数,demo.cpp。内容还是不变。CMakeLists.txt也不变。
  五、多个文件生成一个动态库
  创建test1.cpp文件,复制以下代码  #include   void show_age_1(int age) {  std::cout << "This is lib_1: " << age << std::endl;  }
  创建test2.cpp文件,复制以下代码  #include   void show_age_2(int age) {  std::cout << "This is lib_2: " << age << std::endl;  }
  创建动态库  g++ test1.cpp test2.cpp -fPIC -shared -o libshowage.so
  需要说明的是,多个文件创建动态库的时候, 不能有同名的函数、类、变量的声明 ,否则将无法创建,因为就算创建成功以后,当调用的时候,编译器并不知道该去调用哪一个源文件里面的声明。
  创建 main.cpp 文件,使用这个库,复制以下代码  #include   //声明要使用的函数 extern void show_age_1(int age); extern void show_age_2(int age);  int main(int argc, char** argv) {   show_age_1(18);   show_age_2(36); }
  CMakeLists.txt文件如下  cmake_minimum_required(VERSION 3.0) project(demo)  add_executable(main main.cpp) target_link_libraries(main -L.. -lshowage)
  当我们运行的时候,会发现这样的错误  ./main: error while loading shared libraries: libshowage.so: cannot open shared object file: No such file or directory
  在编译的时候,我们告诉了编译器,在什么地方去寻找该库,但是在运行的时候,由于该库是动态库,其代码没有被链接到目标代码中,因此,在运行的时候,会提示找不到该库。
  因此,只需要将动态库放到默认的路径上或者告诉其指定路径即可。
  在Linux系统中,一般将库放在以下三个地方。其中,/lib用于放置系统级别(或者说内核级别)的库文件,/usr/lib 用于放置程序级别的库文件,/usr/local/lib 为用户级别,一般用户编译的都放在这里,以及源码编译安装,例如:opencv的源码编译。
  因此,我们要将自己的库放在 /usr/local/lib 下,输入以下命令  sudo cp ~/C++/demo/libshowage.so /usr/local/lib
  当我们移动以后,需要输入以下命令(必须),更新  sudo ldconfig
  这样,当我们再次运行的时候,就不会报错了。切记,每次有动态库在上述目录中发生变动,都需要输入这个命令更新,否则还是无法识别。
  六、通过apt安装缺少的动态库
  当我们从github上clone代码的时候,在编译的时候,经常出现xxx.h文件不存在,或者No such file or directory。其本质上就是你的环境和别人的环境不一致,缺少相应的库。一般的解决方式是,将该缺少的头文件复制到百度,查一查这个头文件是来自哪一个库。然后打开终端,输入命令  sudo apt install libxxx-dev
  即可
  如果是自定义的动态库,一般在readme文档中有说明。
  同理,当你向开源社区贡献开源代码的同时,也请务必告知运行的环境以及所需要的库。
  七、总结
  相信通过本文的介绍,读者对库有了一个简单的认识,在以后的工作和学习过程中,遇到类似的问题,也有了解决问题的思路和方法。
  阿木实验室致力于为机器人研发提供开源软硬件工具和课程服务,让研发更高效!
  - End -
  技术发展的日新月异,阿木实验室将紧跟技术的脚步,不断把机器人行业最新的技术和硬件推荐给大家。看到经过我们培训的学员在技术上突飞猛进,是我们培训最大的价值。如果你在机器人行业,就请关注我们的公众号,我们将持续发布机器人行业最有价值的信息和技术。

拍照手机能杀死单反吗?手机拍照能干掉单反吗?我的答案是能,也不能。能,是因为摄影作品是一个很综合的产品。器材对于一张照片的贡献值一般只有10,这是比较可信的说法。照片除了器材的贡献,还有摄影者的主要贡献华为的花粉们,能否谈谈你们为什么选择华为?我本来有一成万元的苹果手机,一天,心中热血沸腾,拋了它,去买回一部目前华为最先进的手机。内心真的是在恨美国对中国企业的加害!爱国之情人人该有。这是一个人的内心付诸了行动!但也希望华有多少人还在用三星手机?NOTE8一直在用本人感谢您的阅读!我之前使用过两部三星手机。第1部是一款全键盘的三星手机采用的是windows系统。第2部是一款被称为神机的三星Galaxy9100。这两部手机对作为一个摄影初级爱好者,同价位下是买卡片还是微单还是单反?如果你对摄影非常感兴趣,那么可以建议购买单反,能多学一些摄影知识,然后在可以过渡到微单,两种机器在使用上还是有差距的,这样以后你两种机器都会使用了你觉得苹果iphone的夜景拍摄很四维图新是一家怎样的地图软件公司,和高德软件比起来四维图新有哪些优劣势?四维图新将要收购高德四维图新前景广阔,被华为借壳上市也不是没有可能四维是国企,发展有些局限性。如果改革后看好。四维是国内最早的图商,起源于中国测绘局,十年前占90以上中国市场,由于有没有哪种20到30元包月每个月有100G的流量卡?什么运营商都行?物联卡!就是不能打电话,西安这边联通营业厅有20元40G30元100G50元500G的流量卡,可以办理,但是该手机卡不能拨打电话,正常的注册微信支付宝是没问题的!建议你去营业厅问,苹果即将推出的14英寸MacBookPro价格将高于当前在售型号品玩8月26日讯,据MacRumors报道,爆料者Dylandkt称,苹果即将推出的14英寸的MacBookPro相比于目前在售的高配版13英寸MacBookPro,价格将提升一个未来的手机市场该归属于谁?目前市场表现而言,由于芯片断供,华为不得不出售荣耀断臂求生,导致国内手机行业格局突变。三季度小米手机全球出货量同比增长45。3为4660万台,以13。5的市场份额力压苹果,成为三季iQOO,终于长成了小米最不希望的模样文丨壹观察宿艺2021下半年的新旗舰市场大战,比往年来得更早一些。8月首轮就迎来了iQOO8系列与小米MIX4的正面对决同样首批发布骁龙888Plus相同定价(4999元起)同样在助听器验配的不好会有什么后果?助听器验配的不好会有什么后果?您好,助听器验配不好最首要的就是会影响患者的使用感受。一是如果增益给的不够,带与不带差别不大,患者渐渐对与人交流信心,缺少交流后会越来越孤僻,增加老年助听器戴久了会影响听力吗?助听器不会越戴越聋的!很多人觉得,随着时间的推移,戴用眼镜的度数越来越高,视力也越来越差,因此推断戴用助听器后听力也会越来越差。想想看,如果不戴眼镜,视力会提高维持不变还是会继续下
TDengine数据迁移导入导出数据库DUMP(taosdump)工具导出数据时,以sql语句的形式导出内容,包括数据库超级表普通表,以及表中的记录数据,然后保存到指定的输出文件中DUMP工具导入数据时,戴助听器还是听不清跟匹配调试声音有关系吗?戴助听器听不清,跟大脑的分辨有一定关系,跟调试和所戴机器性能也有关系,建议到验配中心跟验配师沟通,验配师会给出专业的指导助听器可以帮助听到声音,但是否能听清还跟个人的分辨能力有关系如果微信真的开始全面收费才让使用,你会怎样选择?这么简单的问题,微信收费的话,很多企业会看准机会,弄一款免费的消息软件,蛋糕就那么大你放弃了别人就进来了如果要收费也需要看收多少了。如果收个100以内还是会用,毕竟这个还是比较方便你用过最好的修图软件有哪些?电脑端修图首选Photoshop和Lightroom,不过我近几年都是以手机拍照为主,那就介绍几款我常用的手机修图软件吧。1snapseed说到手机修图软件,首选的一定是snaps1000块钱内的手机有哪款值得推荐?首先感谢您的阅读,使我有了创作的动力。大神不敢当,我只是在这件事情上多用心了一些。推荐1000元内的手机,哪部手机最好,不不不,有很多选择,没有最好的那个,只有最适合的那个。红米N助听器里总有杂音怎么回事?助听器由杂音是刚刚开始佩戴助听器就有杂音还是在佩戴了一段时间后突然有杂音呀?不同的情况出现杂音也是需要不同处理方法的。建议你和你的验配师联系或到就近的验配中心咨询哦。如果在安静的房小米手机使用了36个月左右,是一种怎样的体验?还差四个月满四年,我想我应该是符合要求的。下图是购机的时间,目前仍是日常用机,非备用。使用期间更换过一次屏幕,一个电池,都是自己更换的,大概费用是230。目前状态是屏幕有磕碰,指纹用手机版头条,怎么在发文章的时候把图片插在文章中间?谢邀请我先介绍一下我的写作方式,我是用手写半屏,刚开始都是孩子们给弄的,字母打字,我不会写,经过我的设置,弄成半屏,这样可以随心所欲,所有的键都在方框周围,包括标点符号,刚开始不懂有8000元,想买一部手机,选华为还是苹果好呢?为什么?选华为还是选苹果好?这个应该根据您个人的喜好进行选择。如果经常传东西,打字,或使用语音等,还是华为比较方便。8000元买一部苹果手机用三年也就差不多了该换了,如果用8000买三部华为什么中国员工大多用苹果,而领导都喜欢华为?有调查说老板偏爱用华为手机,女性白领喜欢用苹果,屌丝一点的用小米,这个说法是在2017年开始流行的,是不是真的?不知道!用华为用苹果这跟爱国有毛线关系为什么很多老板喜欢华为手机,你老人有听力问题,佩戴助听器后可以减缓失聪的速度吗?助听器有掩蔽耳鸣的作用,补偿听力,改善言语分辨率,有效声刺激,还可以预防老年痴呆的发生。精神上老人听得到了性格也不会容易孤僻易怒。助听器是一种听力辅助工具,会根据每个人的听力情况选