Ich versuche, Opencv C++
Bibliothek mit einer anderen Bibliothek in C
zu verwenden. Also habe ich eine Struktur in einer .hpp
-Datei definiert, die ich die .h
der C
Bibliothek hinzugefügt habeInitialisierung von C++ - Strukturen von C
typedef struct {
cv::FileStorage fs;
cv::Mat mat;
} myCPPStruct;
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
myCPPStruct * mycppstruct;
} myCStruct;
void initialize_myCPPStruct(myCPPStruct * mycppstruct);
#ifdef __cplusplus
}
#endif
Im .c
Dateien der Initialisierer für myCStruct initialize_myCPPStruct
aufruft, die in einer .cpp
-Datei definiert ist etwas wie:
void initialize_myCPPStruct(myCPPStruct * mycppstruct){
mycppstruct = {};
mycppstruct->fs = cv::FileStorage("file.txt", cv::FileStorage::READ);
mycppstruct->mat = cv::Mat(3,3,CV_8UC3);
}
Aber sobald es um einen Wert zu mycppstruct->fs
zuzuordnen versucht, wird es einen Segmentation Fault. Ich nehme an, das liegt daran, dass es keine Speicherzuweisung in C, aber ich habe versucht,
std::memset(stitcher->fs,0,sizeof(cv::FileStorage));
die auch nicht, da es nicht cv:FileStorage
als void *
analysieren kann nicht funktioniert.
Muss ich die veraltete C OpenCV-Bibliothek verwenden, damit dies funktioniert?
BEARBEITEN - Weitere Details zur Kompilierung.
Für die C
lib, ich neu kompilieren (ohne Verknüpfung dh mit der -c
Option) alle .c
Dateien, in denen ich C++
Funktionen oder Strukturen hinzugefügt haben g++
mit gleichzeitig dafür, ich die __cplusplus
Wachen in den .h
Dateien hinzufügen. Alle .c
Dateien ohne C++
Code haben bereits .o
Dateien kompiliert mit gcc
. Ich kompiliere dann das gesamte Programm mit g++
und stelle sicher, dass die relevanten Bibliotheksdateien enthalten sind. Es gibt keine Compilerfehler.
Wie sehen Sie Ihre C-Compiler erwarten C++ Code zu verarbeiten? –
@ Torbjörn Um, kompilieren ohne Verknüpfung mit g ++? Das Problem hier ist nicht kompilieren –
@ Torbjörn Warum der Downvote? Die Frage ist kein Compiler-Problem –