加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

【Linux公开课】创建静态库和共享库

发布时间:2022-10-24 12:51:28 所属栏目:Linux 来源:
导读:  摘要

  静态库是.o文件的集合,这些.o文件是编译器按照常规方法生成的,在Linux下也称文档(archive),用ar工具来管理。下面以用两个c文件来创建静态库为例进行讲述。

  文员也能看懂学通的《嵌入式
  摘要
 
  静态库是.o文件的集合,这些.o文件是编译器按照常规方法生成的,在Linux下也称文档(archive),用ar工具来管理。下面以用两个c文件来创建静态库为例进行讲述。
 
  文员也能看懂学通的《嵌入式Linux开发教程》正式开始免费连载啦!致远电子微信公众平台【独家首发】。在这个教程中,你看不到自我陶醉的炫技,内容通俗易懂,实用够用为先。本教程凝聚了ZLG致远电子嵌入式工程师的心血,转载请【注明出处】。
 
  10.1.5创建静态库和共享库
 
  1.创建静态库
 
  静态库是.o文件的集合,这些.o文件是编译器按照常规方法生成的,在Linux下也称文档(archive),用ar工具来管理。
 
  下面以用两个c文件来创建静态库为例进行讲述。在用户主目录下,创建一个libhelloa目录,并在其中创建hello1.c和hello2.c两个文件:
 
  然后输入下列命令,将两个文件编译成目标文件:
 
  vmuser@Linux-host:libhelloa$ gcc -c hello1.c hello2.c
 
  编译完成,将会得到hello1.o和hell2.o两个目标文件。
 
  接着,用ar命令即可创建一个库文件。输入下列命令:
 
  vmuser@Linux-host:libhellloa$ ar -r libhello.a hello1.o hello2.o
 
  ar: creating libhello.a
 
  这样,就得到了libhello.a库文件。按照前面介绍的用法进行使用即可。
 
  2.创建共享库
 
  共享库也是目标文件的集合,但这些文件是由编译器按照特殊方式生成的。对象模块的每个地址(函数调用和变量引用)都是相对地址,允许在运行时被动态加载和运行。
 
  创建共享库首先需要编译对象模块。继续以hello1.c和hello2.c为例进行示范。在用户主目录下创建libhelloso目录,将前面两个.c文件复制到其中:
 
  在终端输入下列命令,将两个c文件编译成一个目标文件:
 
  vmuser@Linux-host:libhelloso$ gcc -c -fpic hello1.c hello2.c
 
  与创建静态库不同,这里加入了-fpic参数,表示生成的对象模块是可重定位的,pic表示位置独立代码(Position Independent Code)。
 
  编译完成,得到了hell1.o和hello2.o两个文件,再用下列命令生成共享库:
 
  vmuser@Linux-host:libhelloso$ gcc -shared hello1.o hello2.o -o libhello.so
 
  编译完成linux动态库,得到共享库文件libhello.so。
 
  上面是分步进行介绍的,可以将两条命令合成一条命令,直接编译c文件得到.so共享库:
 
  vmuser@Linux-host:libhelloso$ gcc -fpic -shared hello1.c hello2.c -o libhello.so
 
  生成了共享库后,按照前面介绍的用法进行使用即可。
 
  10.1.6 arm-linux-gcc
 
  arm-linux-gcc是交叉编译器,基本用法与gcc相同。
 
  在微信对话框中回复“Linux”就可以看到本书已推送过的所有章节,如果您看完有收获,请分享到朋友圈。
 
  有任何关于Linux的话题,欢迎在微社区(电子圈)交流、讨论,点击阅读原文即可进入,或加入I.MX技术交流QQ群2:386055727。
 
  MI1062六合一多功能组合仪器,集数字示波器、逻辑分析仪、协议分析仪、信号发生器、码型发生器和扫频仪六大功能于一身,小巧便携,信号测量精准入微,操作易用简捷,创国产组合仪器之先。MI1062多功能组合仪器再次让利!直降2820元!只要1980元!就是这么任性!
 
  有任何疑问请直接在微信对话框中输入您的留言,小编非常乐意为您解答。
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!