Ответ 1
Вы можете исправить заголовки и отправить патч в ffmpeg; совместимость с -pedantic
является достойной целью, поэтому я уверен, что они ее рассмотрят, особенно если она просто включает удаление запятых и т.д.
Недавно я добавил -патентные и -патентные-ошибки в мои параметры компиляции gcc, чтобы помочь очистить мой код кросс-платформы. Все было в порядке, пока не обнаружил ошибки во внешних заголовочных файлах. Есть ли способ отключить эту проверку ошибок во внешних файлах заголовков 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
Вы можете исправить заголовки и отправить патч в ffmpeg; совместимость с -pedantic
является достойной целью, поэтому я уверен, что они ее рассмотрят, особенно если она просто включает удаление запятых и т.д.
Использование опции -Wsystem-headers с gcc будет печатать предупреждающие сообщения, связанные с заголовками системы, которые обычно подавляются. Тем не менее, вы хотите, чтобы gcc рассматривал эти файлы как системные заголовки, поэтому вы можете попробовать передать "-систему/usr/local/ffmpeg" (или где бы вы ни устанавливали этот пакет), чтобы gcc игнорировал ошибки из файлов, включенных в эти каталоги также.
Я не знаю, как gcc перестать выдавать эти предупреждения. Однако вы могли бы взломать сторонние предупреждения с помощью чего-то вроде llvm-gcc (или просто gcc) -pedantic 2 > & 1 | grep -v "/usr/"
Одна идея, которая приходит мне на ум (не знаю, есть ли для этого параметр "из коробки" ):
Подготовьте script, который выведет ваш компилятор и удалит все строки, содержащие заголовки, которые не находятся в определенном списке (ваши заголовки).
Не должно быть так сложно это делать.
Вы не можете сказать GCC быть педантичным о некоторых заголовках, а не о других в настоящее время. Вы можете предложить его как функцию, хотя я подозреваю, что ей будет сопротивляться, так как в идеале все будут педантичными.
Что вы можете сделать, это исправить заголовки самостоятельно, создать патч, а затем применить этот патч к более поздним версиям заголовков, если вы обновите библиотеку.
Отправьте патч к ffmpeg, а также в надежде, что они его усыновят, но в любом случае вы охвачены, даже если они его не принимают.