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