gcc -E 为 c 源文件生成中间文件,但使用 -nostdinc 选项排除标准库

问题描述 投票:0回答:1

我正在尝试使用 gcc -E 标志编译 gcc c 中间文件以生成调用树。 这会生成一个预处理文件来解析函数。 但是,我不希望中间文件中包含 stdlib 函数,因此我使用 -nostdinc 标志。

gcc -E -nostdinc -o

这给了我一个致命错误(没有这样的文件或目录)并终止编译。

:46:10:致命错误:errno.h:没有这样的文件或目录 46 | 46 #包括 编译终止。

有什么方法可以强制预处理完成,因为我根本不关心未找到 std 包含文件,因为我对解析它们不感兴趣。

任何帮助将不胜感激。

谢谢!

我尝试了一些编译标志来抑制错误,但没有帮助。

c gcc preprocessor
1个回答
0
投票

如果您对解析标准库头不感兴趣,并且想要忽略与缺少标准头相关的错误,则可以使用 -isystem 选项指定要视为系统包含目录的目录。您可以指定一个不存在的虚拟目录来抑制与缺少标准标头相关的错误消息。

以下是修改命令的方法:

gcc -E <FILE_NAME.c> -nostdinc -isystem /nonexistent -o <FILE_NAME.i>

此命令告诉 GCC 不要在标准系统目录中搜索头文件 (-nostdinc) 并将 /nonexistent 视为系统包含目录 (-isystem /nonexistent)。由于 /nonexistent 是一个不存在的虚拟目录,GCC 不会在那里找到标准头,但它会抑制与缺少标准头相关的错误消息。

通过此修改,GCC 应继续预处理您的文件并生成中间文件

更新如下,使用此命令:

gcc -E <FILE_NAME.c> -nostartfiles -isystem /nonexistent -o <FILE_NAME.i>
© www.soinside.com 2019 - 2024. All rights reserved.