2010-04-21 147 views
18

我正在处理的代码应该可以为托管和独立环境构建,为后者提供一些stdlib函数的私有实现。使用GCC编译为独立环境

我可以在普通工作站/构建服务器上使用GCC进行可靠测试吗?

  • 的“-ffreestanding”选项看起来前途无量,但它似乎“只有”禁用内置插件和正确设置STDC_HOSTED宏,它仍然提供的所有系统头。

  • 选项“-nostdinc”限制性太强;我仍然想使用独立实现所需的头文件(特别是stddef.h和limits.h)。

我在这里错过了什么?

呵呵,我现在使用的是GCC 4.4.3,会很快升级到4.5.0。

+0

好奇你为什么要建设独立?你正在制作这些铁杆“/ sbin”程序之一吗?你在写内核吗?我只看到了在定制Linux环境中提到的“ - 完美”。 – 2010-04-21 08:31:08

+0

简答题就是市场需求。我们在嵌入式/移动方面的一些客户希望我们的产品是完全独立的。 – Christoffer 2010-04-21 08:40:42

回答

18

好吧,既然还没有答案,我还是不妨描述我是如何完成这项工作的。这很简单,虽然取决于目标系统,但它可能很乏味。

使用“-nostdinc”表示包含路径的标准系统将被跳过;其他包含“-I”的包含路径当然仍会被搜索标题。

因此,对于独立的构建目标,我创建一个文件夹 '包括 - 独立 - C89' 和链接相关的系统头 - float.h时iso646.hlimits.h中stdarg头文件.hstddef.h - 在那里。其他头文件可能会包含在这些文件中,具体取决于您的平台,因此您可能需要进行一些研究并设置更多链接(因此,如果您需要为多个目标平台执行此操作,则需要进行繁琐的工作)。

的C89目录随后可以用作碱关于“包括-独立-C99”,额外的标头链路是stdbool.hstdint.h

命令行使用是然后

gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89 

gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99