Pergunta

Recentemente adicionado -pedantic e -pedantic-errors para minha maquiagem opções de compilação gcc a ajuda de limpeza meu código de plataforma cruzada. Tudo estava bem até que ele encontra erros em arquivos de cabeçalho incluídos externas. Existe uma maneira para desativar esta verificação de erros no cabeçalho externo arquivos IE:

Mantenha a verificação de arquivos incluídos como esta:

#include "myheader.h"

Parar a verificação de incluir arquivos como este:

#include <externalheader.h>

Aqui estão os erros que estou recebendo:

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
Foi útil?

Solução

Você pode corrigir os cabeçalhos e apresentar um patch para ffmpeg; compatibilidade com -pedantic é um objetivo digno então eu tenho certeza que eles considerá-lo, especialmente se ele apenas envolveu a remoção direita vírgulas e afins.

Outras dicas

Usando a opção -Wsystem-cabeçalhos com gcc irá imprimir as mensagens associadas com cabeçalhos do sistema, que são normalmente suprimidos aviso. No entanto, você está olhando para ter gcc basicamente tratar esses arquivos como cabeçalhos de sistema, de modo que você pode tentar passar "-isystem / usr / / ffmpeg local" (ou onde quer que você instalou o pacote) para obter gcc para ignorar erros de arquivos incluídos no esses diretórios também.

Eu não sei de nenhuma maneira de dizer gcc para parar de emitir esses avisos. No entanto, você poderia hackishly remover avisos de terceiros com algo como llvm-gcc (ou apenas gcc) -pedantic 2> & 1 | grep -v "/ usr /"

Uma idéia que vem à minha mente (não sei se há um 'fora da caixa' parâmetro para isso):

Prepare um script que terá saída de seu compilador, e remover todas as linhas que contêm cabeçalhos que não estão em uma lista específica ( seus headers).

não deve ser tão difícil fazê-lo desta forma.

Você não pode dizer GCC ser pedante sobre alguns cabeçalhos e não outros neste momento. Você pode sugerir-lo como um recurso, embora eu suspeito que vai ser combatida como idealmente todo mundo iria ser pedante.

O que você pode fazer é corrigir os cabeçalhos mesmo, gerar um remendo, e depois aplicar esse patch para versões posteriores dos cabeçalhos se você atualizar a biblioteca.

Enviar o patch para ffmpeg bem na esperança de que eles vão adotá-lo, mas de qualquer forma você está coberto, mesmo se eles não aceitá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top