Matlab 如何将.cpp编译为mex?

Matlab 如何将.cpp编译为mex?,matlab,Matlab,超级新的Matlab。。。 基本上我只想跑步: 主.m文件是synGUI文件夹中的“image2sketch.m”。 但是我在windows 7上,而不是linux上,所以有人告诉我需要将剩余的.cpp文件编译成mex文件,以便它运行。 我假设它与Matlab编译器或编码器有关,但我真的不知道为了正确运行它,我应该如何编译或编译哪些.cpp文件。 这些是我在运行“image2sketch.m”时遇到的当前错误: image2sketch [===========================

超级新的Matlab。。。 基本上我只想跑步:

主.m文件是synGUI文件夹中的“image2sketch.m”。
但是我在windows 7上,而不是linux上,所以有人告诉我需要将剩余的.cpp文件编译成mex文件,以便它运行。
我假设它与Matlab编译器或编码器有关,但我真的不知道为了正确运行它,我应该如何编译或编译哪些.cpp文件。
这些是我在运行“image2sketch.m”时遇到的当前错误:

image2sketch
[==================================================
current cluster id: 1
Error using chamferLocate (line 103)
Undefined function 'mex_fitline' for input arguments of type 'struct'.

Error in strokeSampling>(parfor body) (line 71)
        [strokeMatched, curCost] = chamferLocate(img, strokeImg, baseScale, baseAspect,
        threshold);

Error in strokeSampling (line 38)
    parfor j = 1 : length(curRepStrokes)

Error in image2sketch>pushbutton_Bbox_Callback (line 193)
configuration = strokeSampling(edgeSecond, strokeModel,detScale(cateId), 1.1, 1.1, 0.7, 5);

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in image2sketch (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)image2sketch('pushbutton_Bbox_Callback',hObject,eventdata,guidata(hObject))


Caused by:
    Undefined function 'mex_fitline' for input arguments of type 'struct'.

Error while evaluating uicontrol Callback
任何帮助都将不胜感激

一般回答: 在Matlab中导航到包含.cpp文件的文件夹

运行:

(将file.cpp替换为实际文件名,将mex_fitline替换为m文件中缺少的函数名(与错误消息中的相同)。 如果您安装了正确的C/C++编译器,并且file.cpp不需要额外的文件,那么这样就可以了。 您可能需要在不同的文件夹中执行多次,直到生成所有必需的mex文件

如果您没有编译器,可以下载并安装编译器附带的免费Visual Studio社区软件。安装VS Community后,重新启动PC,然后运行mex-setup告诉Matlab

如果需要多个文件file1.cpp file2.cpp等,该命令通常如下

mex file1.cpp file2.lib file3.h... -output mex_name

M文件是脚本,它们不需要编译。其中可能有MEX文件,它们经过编译,因此是特定于平台的。您需要使用MATLAB
MEX
命令为Windows重新编译这些文件。哦,我想我误解了编写它的人,显然我应该将.cpp编译为MEX…libs文件夹中的文件:,我目前遇到的错误相当令人困惑:我无法读取这些图像中的文本。请使用此新信息更新您的问题,并将错误消息复制粘贴到问题中。抱歉,我现在已经编辑了它。因此我尝试在中编译main.cpp,但我得到错误:
C4430:缺少类型说明符-int假设
Actually,不,输出文件名是自动确定的。如果要指定它,需要使用
-output
参数。请参阅文档中的示例:我做得对吗?我收到一个错误:kernel32.lib是否位于带有.cpp文件的文件夹内,还是这是一个windows库?请尝试将kernel32.lib与oth对齐er文件:mex file1.cpp kernel32.lib-输出mex_名称
mex file1.cpp file2.lib file3.h... -output mex_name