2015-02-24 14 views
5

Pracuję z piramidowanym plikiem tiff. Jednak OpenCV nie obsługuje plików tiffamated piramidy, a więc próbuję użyć libtiff 4.0.3, aby wyodrębnić żądaną warstwę/katalog/rozdzielczość, a następnie przekazać ją do przetwarzania OpenCV.Niezgodne biblioteki openCV i libtiff na OSX

I to w następujący sposób:

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

Ale takie postępowanie daje mi następujące w types_c.h:

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

To wydaje int64_t jest różnie definiowane przez każdą z bibliotek 2.

Użyłem homebrew zainstalować obie biblioteki i tak wolałbym nie musieć zmieniać tych bibliotek ponieważ będzie powodować problemy z uzyskaniem aktualizacji, jest ból dla przyszłych programistów w moim zespole, itp

Czy istnieje sposób, w jaki mogę korzystać z obu bibliotek bez ich modyfikacji?

Odpowiedz

6

Ponieważ obie biblioteki "zanieczyszczają" globalną przestrzeń nazw z definicjami (i widzisz, jak ważne jest posiadanie odpowiednich przestrzeni nazw w bibliotekach stron trzecich), nie ma możliwości dołączenia obu do globalnej przestrzeni nazw. Trzeba to jeden z nich owinięty w określonej przestrzeni nazw użytkownika tak:

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

To rozwiąże problem kompilacji choć nie jestem pewien, czy to rozwiązanie jest wygodne do użycia, jak będzie trzeba użyć członków libtiff użyciu libtif :: prefiks,

+0

Nie wiedziałem, że możesz zawierać przestrzeń nazw, właśnie tego szukałem. Prefiks libtif :: nie jest cudowny, ale jest o wiele lepszy niż alternatywy, za niewielką cenę. Dzięki! –

+0

Myślę, że możesz umieścić 'using namespace libtiff; 'po uwzględnieniu i nie mieć żadnych konfliktów, chyba że użyjesz typu' int64' w dowolnym kolejnym kodzie. – Thomas

Powiązane problemy