Я пытаюсь использовать opencv C++
библиотека с другой библиотекой в C
. Таким образом, я определил структуру в качестве .hpp
файла, который я добавил к .h
из C
библиотекиИнициализация структур C++ из 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
В .c
файлы инициализатор для myCStruct вызовов initialize_myCPPStruct
, который определен в файле .cpp
несколько, как:
void initialize_myCPPStruct(myCPPStruct * mycppstruct){
mycppstruct = {};
mycppstruct->fs = cv::FileStorage("file.txt", cv::FileStorage::READ);
mycppstruct->mat = cv::Mat(3,3,CV_8UC3);
}
Но как только он пытается выделить значение mycppstruct->fs
, он получает ошибку сегментации. Я предполагаю, что это происходит потому, что нет выделения памяти в C, но я пытался
std::memset(stitcher->fs,0,sizeof(cv::FileStorage));
который также не работает, поскольку он не может разобрать cv:FileStorage
в void *
.
Должен ли я использовать устаревшую библиотеку C OpenCV, чтобы сделать эту работу?
EDIT - подробная информация о компиляции.
Для C
Lib, я перекомпилировать (без привязки т.е. с опцией -c
) все .c
файлы, в которых я добавил C++
функции или структуры с помощью g++
, удостоверившись, я добавляю __cplusplus
охранников в .h
файлов. Все файлы .c
без C++
кода уже имеют .o
файлы, скомпилированные с gcc
. Затем я компилирую всю программу с помощью g++
, не забудьте включить соответствующие файлы библиотеки. Ошибок компилятора нет.
Как вы ожидаете, что ваш компилятор C для обработки C++ код? –
@ Torbjörn Um, компилировать без ссылки на g ++? Вопрос здесь не компиляции –
@ Torbjörn Почему downvote? Вопрос не в компиляторе –