Come ignorare gli errori pedanti del compilatore gcc nelle intestazioni delle librerie esterne?

StackOverflow https://stackoverflow.com/questions/172484

Domanda

Di recente ho aggiunto -pedantic e -pedantic-errori alle opzioni di compilazione di make gcc per aiutarmi a ripulire il mio codice multipiattaforma. Tutto è andato bene fino a quando non trova errori nei file di intestazione inclusi esterni. Esiste un modo per disattivare questo errore durante il controllo nei file di intestazione esterni IE:

Continua a controllare i file inclusi in questo modo:

#include "myheader.h"

Smetti di controllare per includere file come questo:

#include <externalheader.h>

Ecco gli errori che sto riscontrando:

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
È stato utile?

Soluzione

È possibile correggere le intestazioni e inviare una patch a ffmpeg; la compatibilità con -pedantic è un obiettivo degno, quindi sono sicuro che lo prenderebbero in considerazione, soprattutto se riguardasse solo la rimozione di virgole finali e simili.

Altri suggerimenti

L'uso dell'opzione -Wsystem-headers con gcc stamperà i messaggi di avviso associati alle intestazioni di sistema, che sono normalmente soppressi. Tuttavia, stai cercando di fare in modo che gcc tratti questi file come intestazioni di sistema, quindi potresti provare a passare " -isystem / usr / local / ffmpeg " (o ovunque tu abbia installato quel pacchetto) per fare in modo che gcc ignori gli errori anche dai file inclusi in queste directory.

Non conosco alcun modo per dire a gcc di smettere di emettere quegli avvertimenti. Tuttavia potresti rimuovere in modo hackerato avvisi di terze parti con qualcosa come llvm-gcc (o semplicemente gcc) -pedantic 2 > & amp; 1 | grep -v " / usr / "

Un'idea che mi viene in mente (non so se esiste un parametro "out of the box" per questo):

Prepara uno script che prenderà l'output del tuo compilatore e rimuoverà tutte le righe che contengono intestazioni che non sono in un elenco specifico ( le tue intestazioni).

Non dovrebbe essere così difficile farlo in questo modo.

Non puoi dire a GCC di essere pedante su alcune intestazioni e non su altre in questo momento. Potresti suggerirlo come una caratteristica, anche se sospetto che sarà resistito poiché idealmente tutti sarebbero pedanti.

Quello che puoi fare è correggere tu stesso le intestazioni, generare una patch e quindi applicare quella patch alle versioni successive delle intestazioni se aggiorni la libreria.

Invia la patch anche a ffmpeg nella speranza che la adottino, ma in entrambi i casi sei coperto anche se non la accettano.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top