Несколько определений одного и того же макроса #define в необходимых библиотеках - PullRequest
0 голосов
/ 16 марта 2012

Две библиотеки, которые я включаю, имеют одинаковое определение макроса в каждом из своих соответствующих файлов .h.

#define MAX <some value>       //first definition of MAX in a file
#define MAX <some other value> //second definition of MAX in a *different* file

и в компиляции я получаю

.../httpd.h:43:1: warning: "MAX" redefined

и

.../opencv2/core/types_c.h:272:1: warning: this is the location of the previous definition

Я проверил каждый из этих заголовков, и у них есть охранники #include.

Каков наилучший способ исправить эту ошибку (в противном случае подавить предупреждение с другим флагом -W)?

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Единственная плохая часть в этой ситуации - это зависимости от MAX в вашем коде, если таковые имеются. Если у вас их нет, добавление #undef MAX между двумя #include, возможно, является самым быстрым решением. Если у вас do есть зависимости от MAX, вам может понадобиться выяснить, какая из них (я думаю, это последняя :-) и сделать что-то подходящее.

2 голосов
/ 07 июня 2012

К вашему сведению, Ник, я решил исправить это, изменив источник, как AoeAoe упоминал в комментарии выше. Оказывается, единственное место, где используются макросы httpd.h MAX() и MIN(), - это httpd.cpp, поэтому я просто переместил эти #defines в httpd.cpp, где они действительно должны были быть в первую очередь.

Фактически, они могли быть там в исходном коде MJPG-Streamer, и, возможно, Роботис просто исказил его, когда выбрал части, которые хотел использовать для каркаса Дарвина. В любом случае, текущий код MJPG-Streamer имеет #ifndef охранников около MAX и MIN, а также содержит их в отдельном utils.h файле здесь , который просто включается в httpd.c, здесь , а не httpd.h.

1 голос
/ 16 марта 2012

Здесь не помогут ни гвардейцы, ни флаги компилятора. У вас есть примерно два возможных решения:

  1. Не #include оба заголовка в одном исходном файле.
  2. Добавьте #undef MAX между двумя #include с.
...