谁有过成功将matlab的.m文件编译成cpp文件?

bit01 2004-05-13 04:47:36
我参看了不少网上帖不过还是没有成功,我用的matlab6.5+windowxp,我得具体操作如
下:

1.我使用了图形相关的函数
建立一个m文件test2.m,内容如下:
function test2
plot(rand(10));
用如下命令编译:
mcc -p -B sglcpp test2.m

编译完成后得到与m文件名相对应的hpp和cpp文件、一个主函数文件、bin目录中的

两个Fig文件以及一个exe文件。我把需要的只是与m文件相对应test2.hpp,
test2.cpp以及
bin目录中
的FigureMenuBar.fig和FigureToolBar.fig保留。

2。VC中的操作

2。1 用VC建立win32 application工程,把第一步中提到的文件test2.hpp,
test2.cpp,
FigureMenuBar.fig和FigureToolBar.fig拷贝到工程所在目录中。

2。2 选择菜单Tools-Options-在属性页中选择Directories-下拉框中选择
Include Files,在其最后加入
E:\MATLAB6P5\EXTERN\INCLUDE\CPP
E:\MATLAB6P5\EXTERN\INCLUDE
其中E:\MATLAB6P5为MATLAB的安装路径


再在下拉框中选择Library Files,在最后加入
E:\MATLAB6P5\EXTERN\LIB\WIN32\MICROSOFT\MSVC60
E:\MATLAB6P5\EXTERN\LIB\WIN32


2。3 选择菜单Project-Settings-属性页Link-下拉列表中选择Input,在
Object/library modules文本框中加入 libmmfile.lib libmatlb.lib libmx.
lib libmat.lib libmatpm.lib sgl.lib libmwsglm.lib libmwservices.lib
在Ignore Libraries文本框里,填写msvcrt.lib,libcd.lib

2。4 选择C/C++属性页,在下拉列表中选择Preprocessor,在Preprocessor
definitions中加入MSVC,IBMPC,MSWIND


再在下拉框中选择Precomplied Headers,选中Automatic use of precompiled
headers,在其中填入stdafx.h

2。5 菜单Project-Add To Project-Files把所有拷贝过来的cpp文件加入到当前

程中。

2。6 Win32 Application
由于我选择建立"A simple Win32 Application",这样的工程中默认是没有主窗口
的,只
有一个WinMain函数,以带图形的函数为例,把test2.hpp test2.cpp以及
FigureMenuBar.fig和FigureToolBar.fig拷贝到当前工程中。

在#include "stdafx.h"下面添加
#include "test2.hpp"

在WinMain函数中添加如下代码:
libmmfileInitialize();
libmwsglmInitialize();
mlfHGInitialize(NULL,NULL);
test2();
mlfHGWaitForFiguresToDie();
mlfHGTerminate();
libmmfileTerminate();
libmwsglmTerminate();

此时应该编译能够成功,但却会出现13个宏及函数未定义的错误信息?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

急盼有牛人帮我解答,谢谢

--

〞┆〝
#########〝〝ⅲ 〞〞#########
############### `●` ###############
################# ┗^◆^┛ ##################
###### `╱╲` ###### ●超级野猴子!●

--

mlfHGWaitForFiguresToDie();
mlfHGTerminate();
libmmfileTerminate();
libmwsglmTerminate();

此时应该编译能够成功,但却会出现13个宏及函数未定义的错误信息?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

错误信息如下:
:\matlab6p5p1\extern\include\cpp\dblmtrx.h(768) : error C2065: 'MX_DYNAMIC_STRUCT_REF_ERROR' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(3829) : error C2065: 'mlxJitBreakpoint' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(4847) : error C2065: 'mlxNamelengthmax' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(5035) : error C2065: 'mlxFalse' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(5051) : error C2065: 'mlxTrue' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(5780) : error C2065: 'mlxRegexp' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(5882) : error C2065: 'mlxRegexpi' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(5984) : error C2065: 'mlxRegexprep' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(6123) : error C2065: 'mlxRethrow' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(6850) : error C2065: 'mlxStrfind' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mlmif.h(7294) : error C2065: 'mlx_times_transpose' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\matmtxif.h(691) : error C2065: 'mclScalarToBool' : undeclared identifier
f:\matlab6p5p1\extern\include\cpp\mcccpp.h(119) : error C2065: 'mclValidateOutputError' : undeclared identifier
Error executing cl.exe.

test.exe - 13 error(s), 0 warning(s)

为啥呢?急盼有牛人帮我解答,谢谢

--

〞┆〝
#########〝〝ⅲ 〞〞#########
############### `●` ###############
################# ┗^◆^┛ ##################
###### `╱╲` ###### ●超级野猴子!●
...全文
344 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohe530 2004-09-06
  • 打赏
  • 举报
回复
这个问题我弄了两整天,是有问题,有两个异常
xiaohe530 2004-09-06
  • 打赏
  • 举报
回复
2. 使用了图形相关的函数
建立一个m文件test2.m,内容如下:
function test2
plot(rand(10));
用如下命令编译:
mcc –p –B sglcpp test2
(如果程序由多个文件组成,处理方法同上)
编译完成后得到与m文件名相对应的hpp和cpp文件、一个主函数文件、bin目录中的两个Fig文件以及一个exe文件。我们需要的只是与m文件相对应的hpp文件、cpp文件以及bin目录中的两个fig文件,本例中是test2.hpp,test2.cpp以及bin目录中的FigureMenuBar.fig和FigureToolBar.fig。
xiaohe530 2004-09-06
  • 打赏
  • 举报
回复
1.没有使用图形相关的函数
由于MATLAB的编译器只能对函数m文件进行编译,所以如果原来的程序是脚本程序应改写成函数形式。举例如下:
建立一个m文件test1.m,内容如下:
function y = test1(n)
y = 1 ;
for i = 1 : n
y = y * i ;
end
用如下命令对其进行编译:”
mcc –t –L CPP –h test1
(如果程序由多个m文件组成,在编译命令中只需要指定主文件即可,mcc会自动查找相应的m文件进行编译)
编译完成后会得到与m文件名相对应hpp和cpp文件,本例中是test1.hpp和test1.cpp。
Stress 2004-07-19
  • 打赏
  • 举报
回复
查查你翻译后的c/cpp文件的包含关系,好像是没有包含matrix.h等文件,因此有些定义找不到。我用Matlab Add-in在VC中做,没有问题的。
  • 打赏
  • 举报
回复
关注,顶
klbt 2004-06-12
  • 打赏
  • 举报
回复
超长的问题,帮你顶!

3,423

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧