交叉编译后的动态库太大,在嵌入式平台上放不下,如何处理。

2024-01-13 00:38

本文主要是介绍交叉编译后的动态库太大,在嵌入式平台上放不下,如何处理。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在arm交叉编译工具链下,存在一个strip的工具,使用strip aa.so,就可以将.so文件减少。

 在linux下有个工具叫做strip,这是一个可以将linux下的可执行文件的符号表去除,减少每个可执行文件的大小,这对于嵌入式方面很有必要。
 但是没有了符号表也就意味着没有办法采用gdb进行调试,因为gdb调试是读取ELF文件头来获取符号表,进而调试,
 但strip之后,可执行文件的ELF文件头就没有.symtab这个符号表,有的仅是动态符号表。在strip之后nm libxxx.so是看不到符号表的,
 nm -D libxxx.so可以看到动态符号表,但用处不大,但strip有个参数选项叫做--only-keep-debug,这个选项可以在strip的时候保留debug调试信息,
 但是strip有个弊端,就是什么样的strip就处理什么样的可执行文件,x86的strip处理不了ARM平台的库。当然x86平台上肯定也有ARM的strip工具链。

首先,分离调试信息可以用来下面方法进行分离。

/home/share/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/bin/objcopy --only-keep-debug ../../../libCameraClient-hisiv300/protobuf-2.6.0/lib/libprotobuf.so.9.0.0 ../../../libCameraClient-hisiv300/protobuf-2.6.0/lib/libprotobuf.so.9.0.0.debug

其次,分离后进行so的剥离

 /home/share/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/bin/strip ../../../libCameraClient-hisiv300/protobuf-2.6.0/lib/libprotobuf.so.9.0.0

最后,一步需要将a.so.debug的路径添加到strip之后的a.so,采用下面方法。


/home/share/arm-hisiv300-linux/arm-hisiv300-linux-uclibcgnueabi/bin/objcopy --add-gnu-debuglink ../../../libCameraClient-hisiv300/protobuf-2.6.0/lib/libprotobuf.so.9.0.0.debug ../../../libCameraClient-hisiv300/protobuf-2.6.0/lib/libprotobuf.so.9.0.0

这样做会在a.so中添加一个gnu_debuglink这样一个段来保存debug文件的信息。

这篇关于交叉编译后的动态库太大,在嵌入式平台上放不下,如何处理。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/599693

相关文章

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

一文带你搞懂Redis Stream的6种消息处理模式

《一文带你搞懂RedisStream的6种消息处理模式》Redis5.0版本引入的Stream数据类型,为Redis生态带来了强大而灵活的消息队列功能,本文将为大家详细介绍RedisStream的6... 目录1. 简单消费模式(Simple Consumption)基本概念核心命令实现示例使用场景优缺点2

在.NET平台使用C#为PDF添加各种类型的表单域的方法

《在.NET平台使用C#为PDF添加各种类型的表单域的方法》在日常办公系统开发中,涉及PDF处理相关的开发时,生成可填写的PDF表单是一种常见需求,与静态PDF不同,带有**表单域的文档支持用户直接在... 目录引言使用 PdfTextBoxField 添加文本输入域使用 PdfComboBoxField

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾