Как мне связать 64-разрядный файл MATLAB mex с библиотеками OpenCV

#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-разрядной версии. Вам повезло. 🙂