Linux嵌入式开发-海思3516平台(三)-生成静态动态库

Linux嵌入式开发-海思3516平台(三)-生成静态动态库 圈圈 2023-11-11 10:43:00 927

前言:

在平常的项目开发中我们编写的程序往往可能需要提供给别人使用,我们提供给第三方使用时可能就需要封装成SDK来供别人使用,在我们所有使用的IDE中都集成有封装成函数库的人机交互界面,因为这些IDE的基本编译工具都是GCC,下面我们就看下如何在Linux下使用GCC将我们的文件编译成静态库或者动态库吧。

一、生成静态库

生成静态库最终的文件是.a文件主要经过如下几个步骤:

1、先用我们需要的工具生成o文件,表示我们的源文件没有语法错误,可以使用makefile文件管理,也可以使用GCC命令如下:

arm-himix200-linux-gcc -c -o gpio.o gpio.c生成的o文件如下:

易百纳社区

2、接着我们使用指令将我们生成的o文件转换为静态库:

arm-himix200-linux-ar crs gpio.a gpio.o(这里可以使用多个o文件具有调用关系的)生成的静态库文件如下:

易百纳社区

3、调用我们生成的静态库文件

arm-himix200-linux-gcc -o mian.o gpio.a如果我们的a文件不在我们这个目录下后面需要加-L/目录/gpio.a

二、生成动态库文件

1、首先依旧是生成o文件,我们可以通过如下命令生成o文件或者通过makefile文件生成:

arm-himix200-linux-gcc -c -o main.o main.c

2、然后使用o文件来生成我们需要的so动态库文件:

arm-himix200-linux-gcc -shared -o main.so main.o

生成的动态库文件如下:

易百纳社区

三、注意事项

   1、出错第一次生成动态库不成功的原因报错如下,说的是需要我加-fPIC选型,所以在生成o文件的时候我们需要加入这个选项,报错情况如下,希望大家借鉴:

易百纳社区

2、解决:编译时需要arm-himix200-linux-gcc -fPIC-shared -o main.o main.c这样编译才有效或者是在make文件中CFLAGS += -fPIC添加这个编译选型,这样再来生成库就不会报错了。

3、这个fPIC是个什么选项(摘自网上):

-fPIC 作用于编译阶段,告诉编译器产生与位置无关代码(Position-Independent Code),则产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

gcc -shared -fPIC -o 1.so 1.c

PIC使.so文件的代码段变为真正意义上的共享

如果不加-fPIC,则加载.so文件的代码段时,代码段引用的数据对象需要重定位, 重定位会修改代码段的内容,这就造成每个使用这个.so文件代码段的进程在内核里都会生成这个.so文件代码段的copy.每个copy都不一样,取决于 这个.so文件代码段和数据段内存映射的位置.也就是不加fPIC编译出来的so,是要再加载时根据加载到的位置再次重定位的.(因为它里面的代码并不是位置无关代码)。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
圈圈
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
圈圈
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区