2015-02-24 3 views
5

Ich arbeite mit einer Pyramide TIFF-Datei. OpenCV unterstützt jedoch keine pyramidierten TIFF-Dateien. Daher versuche ich libtiff 4.0.3 zu verwenden, um die von mir benötigte Schicht/Verzeichnis/Auflösung zu extrahieren und sie dann zur Verarbeitung an OpenCV weiterzuleiten.Inkompatibel openCV und libtiff libs auf OSX

I sind wie folgt:

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

Aber so zu tun gibt mir folgendes in types_c.h:

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

Es int64_t erscheint definiert durch jede der zwei Bibliotheken unterschiedlich wird.

Ich habe homebrew verwendet, um beiden Bibliotheken zu installieren und so würde ich es vorziehen, nicht diese Bibliotheken zu bearbeiten zu haben, da die Probleme mit dem Erhalten Updates verursachen wird, einen Schmerz für zukünftige Entwickler in meinem Team zu sein, usw.

Gibt es eine Möglichkeit, beide Bibliotheken zu benutzen, ohne sie zu verändern?

Antwort

6

Da beide Bibliotheken den globalen Namespace mit Definitionen "polulieren" (und Sie sehen, wie wichtig es ist, richtige Namespaces in Bibliotheken von Drittanbietern zu haben), können Sie beide nicht in den globalen Namespace aufnehmen. Sie haben einen von ihnen in einem benutzerdefinierten Namespace wie folgt gewickelt sind:

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

Das Zusammenstellung Problem lösen wird, obwohl ich bin nicht sicher, ob diese Lösung für die Verwendung geeignet ist, wie Sie libtiff Mitglieder verwenden, müssen libtif mit :: prefix,

+0

Ich wusste nicht, dass Sie Namespace enthält so, das ist genau das, was ich gesucht habe. Das libtif :: prefix ist nicht wunderbar, aber es ist so viel besser als die Alternativen, es ist ein kleiner Preis zu zahlen. Vielen Dank! –

+0

Ich denke, Sie können 'nach Namespace libtiff;' nach den Includes setzen und keine Konflikte haben, es sei denn, Sie verwenden den 'int64' Typ in einem nachfolgenden Code. – Thomas