如何编译.cpp到mex?

时间:2018-03-13 00:24:36

标签: matlab

Matlab的新手...... 基本上我只想跑:
https://github.com/panly099/sketchSynthesis
主.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

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

运行:

mex file.cpp -output mex_fitline

(将file.cpp替换为实际文件名,将mex_fitline替换为m文件中缺失函数的名称(与错误消息中的相同)。 如果您安装了正确的C / C ++编译器,并且file.cpp不需要其他文件,那么应该这样做。 您可能需要在不同的文件夹中多次执行此操作,直到构建了所有必需的mex文件。

如果您没有编译器,可以下载并安装随编译器一起提供的免费Visual Studio社区软件。安装VS社区后,重新启动PC,然后运行mex -setup告诉Matlab which compiler to use.

如果你需要多个文件file1.cpp file2.cpp等,那么命令通常就像

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