如何忽略外部库头中的gcc编译器迂腐错误?

时间:2008-10-05 19:14:04

标签: gcc compiler-construction compiler-errors

我最近在make gcc编译选项中添加了-pedantic和-pedantic-errors,以帮助清理我的跨平台代码。一切都很好,直到它在外部包含的头文件中发现错误。有没有办法关闭外部头文件IE中的错误检查:

继续检查包含的文件:

#include "myheader.h"

停止检查包含这样的包含文件:

#include <externalheader.h>

以下是我遇到的错误:

g++ -Wall -Wextra -Wno-long-long -Wno-unused-parameter -pedantic --pedantic-errors
-O3 -D_FILE_OFFSET_BITS=64 -DMINGW -I"freetype/include" -I"jpeg" -I"lpng128" -I"zlib"
-I"mysql/include" -I"ffmpeg/libswscale" -I"ffmpeg/libavformat" -I"ffmpeg/libavcodec"
-I"ffmpeg/libavutil" -o omingwd/kguimovie.o -c kguimovie.cpp

In file included from ffmpeg/libavutil/avutil.h:41,
             from ffmpeg/libavcodec/avcodec.h:30,
             from kguimovie.cpp:44:
ffmpeg/libavutil/mathematics.h:32: error: comma at end of enumerator list
In file included from ffmpeg/libavcodec/avcodec.h:30,
             from kguimovie.cpp:44:
ffmpeg/libavutil/avutil.h:110: error: comma at end of enumerator list
In file included from kguimovie.cpp:44:
ffmpeg/libavcodec/avcodec.h:277: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:303: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:334: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:345: error: comma at end of enumerator list
ffmpeg/libavcodec/avcodec.h:2249: warning: `ImgReSampleContext' is deprecated
(declared at ffmpeg/libavcodec/avcodec.h:2243)
ffmpeg/libavcodec/avcodec.h:2259: warning: `ImgReSampleContext' is deprecated
(declared at ffmpeg/libavcodec/avcodec.h:2243)
In file included from kguimovie.cpp:45:
ffmpeg/libavformat/avformat.h:262: error: comma at end of enumerator list
In file included from ffmpeg/libavformat/rtsp.h:26,
             from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtspcodes.h:38: error: comma at end of enumerator list
In file included from ffmpeg/libavformat/avformat.h:465,
             from kguimovie.cpp:45:
ffmpeg/libavformat/rtsp.h:32: error: comma at end of enumerator list
ffmpeg/libavformat/rtsp.h:69: error: comma at end of enumerator list

5 个答案:

答案 0 :(得分:32)

将-Wsystem-headers选项与gcc一起使用将打印与系统标头关联的警告消息,这些消息通常被抑制。但是,您希望gcc基本上将这些文件视为系统头文件,因此您可以尝试传递“-isystem / usr / local / ffmpeg”(或安装该软件包的任何地方)以使gcc忽略包含在文件中的文件中的错误这些目录也是如此。

答案 1 :(得分:1)

我不知道有什么方法可以告诉gcc停止发出这些警告。但是你可以用llvm-gcc(或者只是gcc)-pedantic 2&gt;&amp; 1 | grep -v“/ usr /”

来删除第三方警告

答案 2 :(得分:0)

我想到了一个想法(不知道是否有“开箱即用”的参数):

准备一个将获取编译器输出的脚本,并删除包含不在特定列表中的标题的所有行(您的标题)。

这样做不应该那么难。

答案 3 :(得分:-2)

你不能告诉GCC对某些标题是迂腐而不是其他标题。你可能会建议它作为一个功能,虽然我怀疑它会被拒绝,因为理想情况下每个人都会迂腐。

您可以做的是自行修复标头,生成修补程序,然后在升级库时将该修补程序应用于更高版本的标头。

将补丁提交给ffmpeg,希望他们能够采用它,但无论哪种方式,即使他们不接受,你也会受到保护。

答案 4 :(得分:-3)

您可以修复标题并向ffmpeg提交补丁;与-pedantic的兼容性是一个有价值的目标,所以我确信他们会考虑它,特别是如果它只涉及删除尾随逗号等。