我是嵌入式系统的新手,想了解更多,
我目前正在优化一个软件的足迹方面的ARM嵌入式系统,并想知道,头文件,你包括在你的源文件。它们放在哪里?
现在我只是使用一个软件(OVP)来模拟ARM硬件平台,但是在真实的硬件中,你必须把头文件放在某个地方,对吗?就像在高清上有了gcc的标准库。我们必须把这个库也插入到嵌入式机器中吗?空间有限!有什么方法可以最小化这个库的大小吗?谢谢!
示例
#include <stdio.h>
#include <stdlib.h>
我用的是交叉编译器arm-elf--gcc
诚挚的问候
Gigu先生
发布于 2011-05-31 16:22:24
您似乎对编译后的可执行代码有一些基本的误解。以下内容适用于嵌入式和台式机系统。
头文件和其他文件一样,只不过是源文件。不同之处在于,它们是由预处理器插入到编译单元中的,而不是直接编译。此外,在大多数情况下,它们只包含声明性语句,并且通常不会在可执行指令或存储数据的意义上对生成的代码做出贡献。
在运行时,不需要在目标上存在任何源代码;编译器的工作是从源代码生成本机可执行机器码。在目标上存储和运行的就是这个机器代码。
头文件和库不是一回事。它只是(通常)对库内容(函数原型和其他符号声明,如常量、数据、宏、枚举)的声明。该库采用存储在组合归档中的预编译/汇编的目标代码的形式。链接器的工作是将所需的库代码与编译您自己的源代码生成的目标代码结合起来。在目标上存储和执行的是这个链接的可执行文件,而不是原始源代码。
有关仅包含声明性代码的头文件的例外情况是,当它们在宏中包含内联代码或可执行代码时。但是,只有在应用程序显式调用的情况下,这些代码才会占用应用程序中的空间。
链接库代码时,仅链接解析应用程序代码中的引用所需的那些库对象代码组件,而不是整个库(除非整个库仅由单个对象文件组成)。
发布于 2011-05-31 15:18:26
该库确实必须包含在刻录到嵌入式系统内存中的映像中。通常,您告诉链接器去掉不使用的函数,这对节省内存有很大的帮助。但是这个内存是你的程序在闪存中占用的内存,或者你用来存储非易失性代码的任何东西。它没有说明你的程序在运行时占用了多少内存。您还可以告诉您的编译器优化空间,也可以使用不同的运行时库-供应商提供的库通常不像它们可能的那样快或小。
https://stackoverflow.com/questions/6184015
复制相似问题