2015-02-24 4 views
5

Я работаю с файлом пирамидного tiff. Однако OpenCV не поддерживает файлы с пирамидным TIFF, поэтому я пытаюсь использовать libtiff 4.0.3 для извлечения нужного вам слоя/каталога/разрешения, а затем передать его OpenCV для обработки.Несовместимые openCV и libtiff libs на OSX

I включают следующее:

#include "tiffio.h" 
#include "opencv2/highgui/highgui.hpp" 

Но делать это дает мне следующее types_c.h:

typedef int64_t int64; 
Typedef redefinition with different types ('int64_t(aka 'long long') vs 'long') 

Он появляется int64_t в настоящее время определяется по-разному каждый из 2-х библиотек.

Я использовал homebrew установить обе библиотеки, и поэтому я предпочел бы не иметь, чтобы изменить эти библиотеки, так как это вызовет проблемы с получением обновлений, будучи боль для будущих разработчиков в моей команде, и т.д.

Есть ли способ использовать обе библиотеки без их модификации?

ответ

6

Поскольку обе библиотеки «используют» глобальное пространство имен с определениями (и вы видите, как важно иметь собственные пространства имен в сторонних библиотеках), нет возможности включить их в глобальное пространство имен. Вы должны включить один из них, завернутых в определенном пространстве имен пользователя, как это:

namespace libtiff { 
    #include "tiffio.h" 
} 
#include "opencv2/highgui/highgui.hpp" 

Это позволит решить проблему компиляции, хотя я не уверен, если это решение удобно для использования, так как вам придется использовать член LibTIFF с помощью libtif :: prefix,

+0

Я не знал, что вы можете использовать пространство имен, это именно то, что я искал. Префикс libtif :: не удивительный, но он намного лучше, чем альтернативы - это небольшая цена для оплаты. Благодаря! –

+0

Я думаю, что вы можете поместить 'using namespace libtiff;' после включения и не иметь конфликтов, если вы не используете тип 'int64' в любом последующем коде. – Thomas