【问题标题】:How to compile with --pedantic-errors on OS X?如何在 OS X 上使用 --pedantic-errors 进行编译?
【发布时间】:2010-02-23 18:06:26
【问题描述】:

这是一个简单的 C 文件:

#include <stdio.h>
#include <stdlib.h>

int
main() {
    printf("hi there!\n");
    return 0;
}

gcc -ansi -pedantic -pedantic-errors 编译得到:

In file included from /usr/include/i386/_structs.h:38,
             from /usr/include/machine/_structs.h:31,
             from /usr/include/sys/_structs.h:57,
             from /usr/include/sys/signal.h:154,
             from /usr/include/sys/wait.h:116,
             from /usr/include/stdlib.h:65,
             from test.c:2:
/usr/include/mach/i386/_structs.h:91: error: type of bit-field ‘__invalid’ is a GCC extension

还有更多关于 GCC 扩展的错误。我知道我可以删除-pedantic-errors 开关并重新编译,但由于一个原因和另一个原因,这不在卡片中。有没有办法克服这个错误?也许下载和安装另一个 C 库?我正在本地处理需要在远程机器上编译的代码,所以很遗憾,我无法将 Makefile 设置为指向特殊的库位置。

【问题讨论】:

    标签: c macos gcc header-files


    【解决方案1】:

    您可以修改 /usr/include/mach/i386/_structs.h:91 以使用 __extension__ 关键字。尽管您不得不想知道为什么现在还不是这样。

    另一个文件级别解决方案是在 _structs.h 的顶部添加一个#pragma GCC system_header 指令。

    要在构建级别修复它,请将-isystem /usr/include/mach/i386/ 添加到编译器选项。然后将包含该文件夹中的所有标题,就好像它们是系统标题一样(应该已经是这种情况,但显然不是)。

    【讨论】:

    • 我想知道,我想。它不像 stdlib.h 是一些奇怪的 mach-only 头文件,用于大声哭泣。我相信您的解决方案会奏效,但我认为这绝对是最后的解决方案。
    • 好的,我添加了几个额外的解决方案,其中一个应用于构建而不是文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2016-11-04
    • 2014-03-21
    • 2015-01-21
    相关资源
    最近更新 更多