c - 了解编译 C 代码时发生错误的阶段

标签 c gcc

我正在使用 gcc 来编译我的 C 代码。出于好奇,我想知道错误发生在哪个阶段。有没有办法在编译出错的时候打印这些信息?

最佳答案

正如上面所评论的那样,如果您理解消息,则在确定消息的来源(预处理器、汇编器、编译器或链接器)时应该没有问题。然而,为了回答您的问题,这三个阶段可以通过传递给 gcc 的几个编译器选项轻松分开。

您可能会尝试的第一个选项是 -E。传递 -E 将在预处理阶段后停止 gcc,输出只是经过预处理的 C 代码。如果您的错误消息出现在那里,它是由预处理器生成的。否则,请继续阅读。

第二个选项是-S。这将在预处理和编译之后但在汇编和链接之前停止 GCC。如果您在此阶段看到错误消息,则它是由预处理器(但您已在上一步中排除了它)或编译器生成的。否则,请继续阅读。

要尝试的第三个也是最后一个选项是 -c。传递-c 将要求GCC 预处理、编译和汇编源文件,但不链接。如果您在此阶段看到错误消息,则它是由预处理器或编译器(但您排除了上一步中已经存在的那些)或汇编器生成的。否则它来自链接器。

关于c - 了解编译 C 代码时发生错误的阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17143608/

相关文章:

python - Python 和 C 中多线程的困惑

c - 将全局声明的缓冲区写入 FLASH 时出现 STM32 Hardfault 异常

c++ - OpenCV:使用 cmake 时对 `cv::imread 的 undefined reference

gcc - 为什么常见的 C 编译器在输出中包含源文件名?

c++ - 如何从共享库中提取虚拟表信息?

c - 设置 MinGW 在 WINAPI 中创建 OpenGL 上下文?

c - IPC vs 域 sock vs 命名管道

c - -错误 : Subscripted value is neither array nor pointer nor vector

iphone - 应用程序在 Apple LLVM 3.0 上崩溃但在 LLVM GCC 4.2 上运行正常

c++ - 编译时链接错误故障排除