【问题标题】:Compiling OpenCV source code to Matlab将 OpenCV 源代码编译到 Matlab
【发布时间】:2012-11-26 14:03:36
【问题描述】:

我正在尝试在 Matlab 中编译 C++ 代码。源代码使用 OpenCV 库。 当我写:

mex myfile.cpp

我收到以下错误:

致命错误C1083:无法打开包含文件:'opencv2/opencv.hpp'没有这样的文件或目录

我正在使用 Matlab r2012b 并在 Windows 7 上安装 Visual c++ 2010。

请问有什么解决办法吗?

谢谢。

编辑:我执行了以下操作,但出现另一个错误:

 mex -v -largeArrayDims Calib.cpp -I"C:\opencv\build\include" ... 
-L"C:\opencv\build\x86\vc10\lib"  -lopencv_calib3d240d -lopencv_core240d ... 
-lopencv_highgui240d -lopencv_imgproc240d -llibCam


->     Default options filename found in C:\Users\Ali\AppData\Roaming\MathWorks\MATLAB\R2012b 
    ---------------------------------------------------------------- 
    ->    Options file           = C:\Users\Ali\AppData\Roaming\MathWorks\MATLAB\R2012b\mexopts.bat 
          MATLAB                 = C:\Programmes\MATLAB\R2012b 
    ->    COMPILER               = cl 
    ->    Compiler flags: 
             COMPFLAGS           = /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD 
             OPTIMFLAGS          = /O2 /Oy- /DNDEBUG 
             DEBUGFLAGS          = /Z7 
             arguments           =  -IC:\opencv\build\include 
             Name switch         = /Fo 
    ->    Pre-linking commands   =  
    ->    LINKER                 = link 
    ->    Link directives: 
             LINKFLAGS           = /dll /export:mexFunction /LIBPATH:"C:\Programmes\MATLAB\R2012b\extern\lib\win32\microsoft" libmx.lib libmex.lib libmat.lib /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"C:\Users\Ali\AppData\Local\Temp\mex_LVNr2V\templib.x" /MAP:"Calib.mexw32.map" 
             LINKDEBUGFLAGS      = /debug /PDB:"Calib.mexw32.pdb" 
             LINKFLAGSPOST       =  
             Name directive      = /out:"Calib.mexw32" 
             File link directive =  
             Lib. link directive =  
             Rsp file indicator  = @ 
    ->    Resource Compiler      = rc /fo "mexversion.res" 
    ->    Resource Linker        =  
    ---------------------------------------------------------------- 


    --> cl  -IC:\opencv\build\include /c /GR /W3 /EHs /D_CRT_SECURE_NO_DEPRECATE /D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 /DMATLAB_MEX_FILE /nologo /MD /FoC:\Users\Ali\AppData\Local\Temp\mex_LVNr2V\Calib.obj -IC:\Programmes\MATLAB\R2012b\extern\include -IC:\Programmes\MATLAB\R2012b\simulink\include /O2 /Oy- /DNDEBUG Calib.cpp 

    Calib.cpp 
        Contents of C:\Users\Ali\AppData\Local\Temp\mex_LVNr2V\mex_tmp.rsp: 
      C:\Users\Ali\AppData\Local\Temp\mex_LVNr2V\Calib.obj 


    --> link /out:"Calib.mexw32" /dll /export:mexFunction /LIBPATH:"C:\Programmes\MATLAB\R2012b\extern\lib\win32\microsoft" libmx.lib libmex.lib libmat.lib /MACHINE:X86 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /manifest /incremental:NO /implib:"C:\Users\Ali\AppData\Local\Temp\mex_LVNr2V\templib.x" /MAP:"Calib.mexw32.map"  @C:\Users\Ali\AppData\Local\Temp\mex_LVNr2V\mex_tmp.rsp  C:\opencv\build\x86\vc10\lib\libCam.lib 
    C:\opencv\build\x86\vc10\lib\opencv_calib3d240d.lib C:\opencv\build\x86\vc10\lib\opencv_core240d.lib C:\opencv\build\x86\vc10\lib\opencv_highgui240d.lib C:\opencv\build\x86\vc10\lib\opencv_imgproc240d.lib  

    LINK : error LNK2001: symbole externe non résolu mexFunction 
    C:\Users\Ali\AppData\Local\Temp\mex_LVNr2V\templib.x : fatal error LNK1120: 1 externes non résolus 

      C:\PROGRA~3\MATLAB\R2012B\BIN\MEX.PL: Error: Link of 'Calib.mexw32' failed. 

    Error using mex (line 206)
    Unable to complete successfully. 

【问题讨论】:

    标签: matlab opencv compilation


    【解决方案1】:

    您应该将包含标志和链接库添加到命令行。也就是说,

    mex myfile.cpp -I header_path -l opencv_libraries

    【讨论】:

      【解决方案2】:

      请尝试:

      mex -largeArrayDims Calib.cpp -IC:\opencv\build\include -LC:\opencv\build\x86\vc10\lib...
       -l opencv_calib3d240d -l opencv_core240d -l opencv_highgui240d -l opencv_imgproc240d
      

      顺便说一句,您链接 opencv_d.lib 而不是 opencv_.lib 文件是否有特殊原因?

      【讨论】:

      • 我得到以下信息: LINK : 错误 LNK2001: 无法解析的外部符号 C:\Users\Ali\AppData\Local\Temp\mex_REFPaa\templib.x : 致命错误 LNK1120: 1 externes notsolved C: \PROGRA~3\MATLAB\R2012B\BIN\MEX.PL:错误:“Calib.mexw32”链接失败。使用 mex 时出错(第 206 行)无法成功完成。
      • 能否请mex -v 获得更详细的输出?您可以从输出中读取缺少的外部符号是什么吗?您是否尝试包含或链接到其他库或代码?此错误与您之前报告的cannot open file不同吗?
      • 是的,这个错误与我之前报告的“无法打开文件”不同。除了 opencv 之外,我还使用了另外一个头文件和库。我把库文件和头文件放在 opencv 目录中
      • 能否请mex -v 并发布有关缺少符号的更详细错误?
      • 您缺少的符号是 mexFunction - 这是 matlab 中任何 mex 函数的主要条目。您熟悉用 C/C++ 编写用于 matlab 的 mex 函数吗?有关详细信息,请参阅mathworks.com/help/matlab/apiref/mexfunction.html
      猜你喜欢
      • 2020-08-06
      • 2013-04-23
      • 2015-04-27
      • 1970-01-01
      • 2012-11-12
      • 2011-03-26
      • 2021-11-08
      • 1970-01-01
      • 2019-09-11
      相关资源
      最近更新 更多