如何使用GCC编译独立环境?

Chr*_*fer 20 gcc c99 c89 freestanding

我正在研究的代码应该可以为托管和独立环境构建,为后一种情况提供某些stdlib函数的私有实现.

我可以在普通的工作站/构建服务器上使用GCC进行可靠的测试吗?使用GCC编译独立环境

  • "-ffreestanding"选项看起来很有前途,但它似乎"只"禁用内置函数并正确设置STDC_HOSTED宏,它仍然提供所有系统头.

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

我在这里错过了什么?

哦,我现在正在使用GCC 4.4.3,很快就会升级到4.5.0.

Chr*_*fer 20

好吧,既然没有给出答案,我也可以描述一下我是如何做到这一点的.这很简单,虽然取决于目标系统,它可能很乏味.

使用"-nostdinc"意味着将跳过标准系统包含路径; 用"-I"给出的其他包含路径当然仍将被搜索标题.

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

然后可以将C89目录用作'include-freestanding-c99'的基础,链接的额外标题是stdbool.hstdint.h

然后使用命令行

gcc -std=c89 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c89 
Run Code Online (Sandbox Code Playgroud)

要么

gcc -std=c99 -nostdinc -nostdlib -ffreestanding -I include-freestanding-c99
Run Code Online (Sandbox Code Playgroud)