Opencv und SystemC
-
Hallo,
Ich habe ein Problem, wenn ich OpenCV und SystemC gemeinsam benutzen möchte.
Beim Kompilieren auf einen 64bit Rechner kriege ich folgenden den Fehler:
../include/systemc.h:257: error: ‘int64’ is already declared in this scope
../include/systemc.h:281: error: ‘uint64’ is already declared in this scopeBeim 32-bit Rechenr funktioniert es beide Includefiles einzubinden. Hat jemand eine Idee wie man das Problem umgehen kann?
Beste Grüße
-
In OpenCVs types_c.h steht
#if defined _MSC_VER || defined __BORLANDC__ typedef __int64 int64; typedef unsigned __int64 uint64;SystemC kenn ich nicht, aber falls es da nicht getypedeft ist sondern ge#defined, könnte ein popeliger Workaround könnte sein, einfach nach dem include von SystemC die fiesen Dinger zu undeffen. Damit du das nicht mehrmals machen musst, kannst du dir ja eine .h schreiben, die das macht, und dann in deinem Projekt nur die einbinden, sozusagen ein Mini-include-Wrapper.
-
Ich habe grade ähnliche Probleme, bei uns gibt es zwei unterschiedliche Header mit typedefs für BOOL, BOOLEAN und Bool (C-Altlasten), die sich nicht ganz grün sind und sich vor Allem zum Teil mit den entsprechenden typedefs aus der WinAPI beißen.
Der saubere Ansatz: benutze nicht beides in der selben Übersetzungseinheit. Verseuche vor allem deine eigenen Header nicht mit typedefs aus irgendwelchen Fremdbibliotheken. Und wenn du tatsächlich mal Funktionalitäten aus beiden Bibliotheken in einer deiner Funktionen benutzen musst/willst, dann hilft eine Indirektion: Deklariere eine Handvoll eigene Funktionen in einem Header, die die benötigte Funktionalität einer der Bibliothekene an die Bibliothek selbst weiterleiten.
Beispiel:
//mySystemC.hpp void mySystemCFunc(unsigned int i); //mySystemC.cpp #include "SystemC.h" void mySystemCFunc(unsigned int i) { theRealSystemCFunc((int64) i); } //mymixedimpl.cpp #include "OpenCV.h" #include "mySystemC.hpp" void foo() { unsigned i = someOpenCVFunc(); mySystemCFunc(i); }