#matlab #opencv #64-bit
#matlab #opencv #64-разрядный
Вопрос:
Обычно в MATLAB я могу скомпилировать mex-файл, который использует функции OpenCV, используя:
mex -O "mxFunc.cpp" -I"C:OpenCV2.1include/opencv" -L"C:OpenCV2.1lib" -lcv210 -lcvaux210 -lcxcore210 -lhighgui210
Однако, переключившись на 64-разрядную версию MATLAB, я теперь получаю неразрешенные символы, например
mxFunc.obj : error LNK2019: unresolved external symbol cvReleaseImage referenced in function mexFunction
Как я могу это исправить?
Система: Windows 7 64-разрядная; MSVC 2005; MATLAB R2010b 64-разрядная; OpenCV 2.1.0.
Ответ №1:
В общем случае: вам необходимо перекомпилировать используемые библиотеки в 64-разрядный.
Насколько я знаю, этого недостаточно. Если вы используете STL (а OpenCV использует много), вам нужно использовать ту же версию CRT, что и Matlab. Итак, вам нужно использовать ту же версию MSVC, что и ребята из Mathworks…
Вы можете проверить зависимость libmex.dll чтобы выяснить, какой CRT необходим. После этого вам нужно установить соответствующий Visual C (обычно бесплатной версии достаточно).
Комментарии:
1. Использование 64-разрядных библиотек сработало. Мне пришлось настроить новое 64-разрядное решение MSVC с использованием CMAKE, назвав «Генератор» как «Visual Studio 8 2005 Win64». Я не знаю, был ли компилятор, который я использовал, таким же, как тот, который использовался для генерации libmex.dll , но это все равно сработало.
2. @user664303: 32-разрядная версия 2010a / 20010b использует версию 2005. Я полагаю, что они используют ту же версию для 64-разрядной версии. Вам повезло. 🙂