随笔分类 -  编译链接

摘要:介绍 官网 https://sourceware.org/newlib/ github 代码 https://github.com/mirror/newlib-cygwin 官网简介 Newlib是一个用于嵌入式系统的C库。它是几个库部分的集合,所有这些部分都在免费软件许可证下,使它们可以在嵌入式产 阅读全文
posted @ 2024-05-30 15:31 zephyr~ 阅读(830) 评论(0) 推荐(0) 编辑
摘要:Newlib的构成 Newlib由三部分构成:libgloss、libc、libm,三者在Newlib原代码中的存储位置如下。 newlib-x.y.z libgloss newlib libc libm libc是标准C库,libm是标准数学库,那libgloss是干啥的? C库的部分函数需要引用 阅读全文
posted @ 2024-05-28 16:37 zephyr~ 阅读(92) 评论(0) 推荐(0) 编辑
摘要:背景 在嵌入式领域,SRAM空间比较小,所以经常要求开发人员进行代码优化,那怎么去优化,如何判断哪个模块比较占用内存,是代码段还是数据段? 使用readelf和objdump工具能解析elf文件的代码和数据段,从而去查看每个变量和每个函数的大小 使用readelf # objdump file.el 阅读全文
posted @ 2024-04-24 12:54 zephyr~ 阅读(240) 评论(0) 推荐(0) 编辑
摘要:什么是linker relaxations 由于链接时携带一些符号地址信息,可以执行一些编译时难以或者不大可能实现的优化。Linker Relaxtion 与传统编译时期的优化是不一样的,此优化发生在链接时。通常情况下,在链接时,改变代码的执行序列是有风险的,因为语义信息此时会丢失,链接器看到也仅是 阅读全文
posted @ 2024-01-19 20:06 zephyr~ 阅读(289) 评论(0) 推荐(0) 编辑
摘要:没有操作数的汇编程序指令 asm [asm-qualifiers] ( AssemblerInstructions ) 拆解说明 asm:asm是GNU的汇编扩展 asm-qualifiers:限定符,可选volatile、inline AssemblerInstructions:汇编指令,使用引号 阅读全文
posted @ 2024-01-05 12:10 zephyr~ 阅读(32) 评论(0) 推荐(0) 编辑
摘要:什么是libgloss The libgloss directory contains code specific to particular platforms on which the library will be used, generally referred to as the Boar 阅读全文
posted @ 2023-12-12 17:05 zephyr~ 阅读(11) 评论(0) 推荐(0) 编辑
摘要:C语言运行库 任何一个C程序,它的背后都有一套庞大的代码来进行支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所依赖的函数所构成的函数集合。当然,它还理应包括各种标准库函数的实现。 这样的一个代码集合称之为运行时库(Runtime Library)。而C语言的运行库,即被称为C运行库( 阅读全文
posted @ 2023-10-29 16:33 zephyr~ 阅读(381) 评论(0) 推荐(0) 编辑
摘要:链接脚本由一系列语句组成,语句分两种,一种是命令语句,另外一种是赋值语句。链接脚本语法像C语言,主要有如下几点相似之处。 语句之间使用分号";"作为分割符。 原则上讲语句之间都要以";"作为分割符,但是对于命令语句来说也可以使用换行来结束该语句,对于赋值详吾句来说必须以";"结束 表达式与运算符 脚 阅读全文
posted @ 2023-10-29 15:54 zephyr~ 阅读(573) 评论(0) 推荐(0) 编辑
摘要:弱符号与强符号 说明 对于C/C++语言来说,编译器默认函数和初始化了的全局变量为强符号,未初始化的全局变量为弱符号。我们也可以通过GCC的"__attribute__((weak))"来定义任何一个强符号为弱符号。注意,强符号和弱符号都是针对定义来说的,不是针对符号的引用。 比如我们有下面这段程序 阅读全文
posted @ 2023-10-29 14:51 zephyr~ 阅读(81) 评论(0) 推荐(0) 编辑
摘要:为了学习使用objdump和size命令,以simple_section.c为例进行分析。 编译环境是x86 ubuntu下的交叉编译arm指令: 首先编译这个文件。 arm-none-eabi-gcc -c simple_section.c 命令解释 objdump 作用:分析二进制文件的内容信息 阅读全文
posted @ 2023-10-28 21:04 zephyr~ 阅读(479) 评论(0) 推荐(0) 编辑
摘要:为了学习使用objdump和size命令,以simple_section.c为例进行分析。 编译环境是x86 ubuntu,首先编译这个文件。 gcc -c simple_section.c 命令解释 objdump 作用:分析二进制文件的内容信息 objdump --help Usage: obj 阅读全文
posted @ 2023-10-28 20:46 zephyr~ 阅读(135) 评论(0) 推荐(0) 编辑
摘要:gnu解释 https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html 从最终可执行镜像中删除未使用的function和data,是由链接器来完成的。需要以下几个步骤 function和data编译成单独的section,使用编译 阅读全文
posted @ 2023-10-05 10:01 zephyr~ 阅读(122) 评论(0) 推荐(0) 编辑
摘要:编译基础概念 为了描述链接器脚本语言,我们需要定义一些基本概念和词汇。 链接器干的主要事情就是把输入文件整合成一个输出文件。那么输入是什么?输出是什么?怎么整合?整合的是什么信息? 输入和输出文件都是object文件格式。它们都称为目标文件。输出文件又称为可执行文件。它们的内容格式类似,都有很多的s 阅读全文
posted @ 2023-09-28 18:47 zephyr~ 阅读(330) 评论(0) 推荐(0) 编辑
摘要:GNU不同编译选项的区别 nostartfiles 不使用启动文件,默认使用库 nodefaultlibs 不使用默认库,默认使用启动文件 nostdlib 不使用启动文件,不使用默认库 nolibc 不使用启动文件,不使用与系统库紧耦合的库 -nostartfiles -nodefaultlibs 阅读全文
posted @ 2023-08-14 21:39 zephyr~ 阅读(273) 评论(0) 推荐(0) 编辑
摘要:# 解决方案 1. 添加了 -include *.d 指令; 2. gcc 编译指令中,添加了 -MMD 参数; ``` -include (OBJFILES:(CC) (CFLAGS)c< -o $@ ``` # M,-MM,-MMD,-MF, 阅读全文
posted @ 2023-04-28 11:45 zephyr~ 阅读(299) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示