找回密码
 注册
Simdroid-非首页
楼主: taohe

【原创】程序中使用MATLAB编译产生的DLL (VS2005, MATLAB7.5, mwArray)

[复制链接]
发表于 2007-11-4 18:55:15 | 显示全部楼层 来自 上海
看到另一帖子里说的关于修改matlab配置文件使其支持2005的方法。
这个配置文件应该修改哪里呢?
我试过修改E:\MATLAB71\bin\win32\mbuildopts下的compp.bat
和E:\MATLAB71\bin\win32\mexopts 下的msvc70opts.bat
内容和下面这个连接的代码一样,只是把vs8的目录改为自己的安装目录
http://www.simwe.com/forum/thread-803349-1-4.html

但是还是出现了cpp配置失败的提示。

现在我很困惑为什么自己运行mbuild -setup只有1个选项,第2个是空。

谢谢。
一直卡在这里,可能太啰嗦了,见谅
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-5 18:55:51 | 显示全部楼层 来自 新加坡
Simdroid开发平台
可能是matlab7.0不自动支持VS2005。如果要手工修改配置文件的话,应该修改Document and Settings\你的用户名\Application Data\Mathworks\MATLAB\compopts.bat。

不过matlab7.0的确不是一个好的版本,bug比较多,最好能升级到其后的某个版本,比如7.0.4或者R2007b。
回复 不支持

使用道具 举报

发表于 2007-11-6 16:17:07 | 显示全部楼层 来自 上海
原帖由 taohe 于 2007-11-5 18:55 发表
可能是matlab7.0不自动支持VS2005。如果要手工修改配置文件的话,应该修改Document and Settings\你的用户名\Application Data\Mathworks\MATLAB\compopts.bat。

不过matlab7.0的确不是一个好的版本,bug比较 ...

非常感谢:)我修改了覆盖了这个文件文件,出现了如下错误:
E:\MATLAB71\BIN\WIN32\\..\MEX.PL: Error: The current options file is not configured to create DLLs. You can use
mbuild -setup to set up an options file which is configured to create DLLs.

可能我借用您另外一个帖子里的代码,只是修改了vs8的目录那一行代码还不够。我后来的解决办法是,安装了vc6+,mubild -setup选择vc6。然后把compopts.bat文件的VC目录修改为VS8的目录。编译运行通过。(我不知道这样做,我把VC6卸载过后还能不能继续好用。)

--------以下是我参照楼主的例子开始学习matlab与vc的接口以来遇到的一些问题,现在的理解。 高手见笑了,希望能减少少数新人烦恼的时间--
贴在这里了,希望楼主不要介意:)
0、“又出现了另一个问题,LINK : fatal error LNK1104: 无法打开文件“mclmcrrt.lib”
前一页第二章图http://www.simwe.com/forum/attachments/day_071006/20071006_d68a21766c18b23bfcd1n2X2k3tjlHt8.gif,添加linker的额外搜索路径的时候,目录要选择到~\microsoft\msvc70,因为看图上只看到microsoft,我误操作了,没有选择一个msvc目录,因此出现了无法打开mclmcrrt.lib的错误。这个是自己太粗心了,没注意看microsoft目录下根本没有mclmcrrt.lib文件。

1、mbuild -setup命令后没有出现vc++的选项   
     我之后有装vc6.0++,再次运行matlab时候就看到第二个选项是vc6++了。之前没有出现,大概是matlab只能认识在它之后安装的vc程序。

2、我前面说到“mcc -l myadd2 “和“mcc -W cpplib:libmyadd2 -T link:lib myadd2 ”的文件结果时候,提“没看懂-l和-w有什么大的不同。。为什么用另外一个命令编译,得到同样类型的文件,而myadd2传的参数就不同了。”(这个可能让高手见笑了:)。
     这个不是-i和-w的区别,而是cpplib:libmyadd2的问题。前一个-i命令产生的是c的接口文件,而后一个命令产生的是c++接口的文件。我向这两种文件唯一的区别在于传的参数一个是mxArray 而另一个是mwArray吧。

3、说到matlab支持vs2005,我现在用vc6引擎编译的文件dll,h,cxf等文件,也完全可以用在vs2005建立项目。大概一个笨的办法就如我这样,装一个vc6作为编译引擎。楼主说的修改compopts.bat是个最方便的方法(我暂时还不知道修改哪些地方)。

学习楼主的例子,收获良多,非常感谢!!!!

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2007-11-11 11:23:58 | 显示全部楼层 来自 湖北鄂州
非常感谢搂主,在我用上面的方法调试时,弹出了这样的对话框,
Warning: Unable to find Java library: C:\WINDOWS\system32

\/sys/java/jre/win32/jre/bin/client/jvm.dll
please check if you have a MATLAB_JAVA environment variable
Note that MATLAB requires Java version 1.4 or higher
请教一下这是怎么回事?

还有以下的在命令行中出现的错误
I18N Runtime Warning:
        Missing ICU data file detected while processing directory containing lib
ut.{dll|so|sl|dylib}.
        Hint: Check for a misconfigured environment or installation.
I18N Runtime Warning:
        Misconfigured ICU_DATA directory path.
        Hint: Check for a misconfigured environment or installation.
Warning: Name is nonexistent or not a directory: C:\WINDOWS\system32\\toolbox\lo
cal.
??? Undefined function or variable 'matlabrc'.

Could not initialize libmyadd2!
回复 不支持

使用道具 举报

发表于 2007-11-13 21:16:15 | 显示全部楼层 来自 陕西西安

回复 #24 taohe 的帖子

干净系统下,安装了MATLAB 2007B+VS2005,同时也修改了msvc80opts、msvc80compp的安装目录,用MEX和MBUILD时却怎么也无法找到VC2005的编译器,请问怎么回事?你用的时候没有问题么?
附注:不想用25楼提到的替换方法!
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-13 21:25:01 | 显示全部楼层 来自 新加坡
如果是MATLAB 2007B+VS2005的话,应该不会有问题的。

在matlab命令行运行
mex -setup
以及
mbuild -setup
应该就搞定了。
回复 不支持

使用道具 举报

发表于 2007-11-14 12:57:15 | 显示全部楼层 来自 陕西西安
原帖由 taohe 于 2007-11-13 21:25 发表
如果是MATLAB 2007B+VS2005的话,应该不会有问题的。

在matlab命令行运行
mex -setup
以及
mbuild -setup
应该就搞定了。

已经这样捣鼓了很久了,就是不行。刚才把两个程序重装了一下,结果依旧,咋会出现这样的情况呢!!看来还是装回VS2003才行。。。:L
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-14 22:35:36 | 显示全部楼层 来自 新加坡
原帖由 fspider 于 2007-11-14 12:57 发表

已经这样捣鼓了很久了,就是不行。刚才把两个程序重装了一下,结果依旧,咋会出现这样的情况呢!!看来还是装回VS2003才行。。。:L

你的问题是在mex -setup的时候无法检测到vs2005吗?

你的matlab和vs2005中的VC++各自都能用吗?

你把在matlab中运行“mex -setup“后显示的信息贴出来,大家帮忙看看。
回复 不支持

使用道具 举报

发表于 2007-11-15 10:38:34 | 显示全部楼层 来自 陕西西安
原帖由 taohe 于 2007-11-14 22:35 发表

你的问题是在mex -setup的时候无法检测到vs2005吗?

你的matlab和vs2005中的VC++各自都能用吗?

你把在matlab中运行“mex -setup“后显示的信息贴出来,大家帮忙看看。

刚再一次恢复系统,先装VS2005简体中文版,后装matlab 2007b,直接mex -setup结果如下:
mex -setup
Please choose your compiler for building external interface (MEX) files:

Would you like mex to locate installed compilers [y]/n? y

Select a compiler:
[1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2007b\sys\lcc

[0] None

Compiler: 1

Please verify your choices:

Compiler: Lcc-win32 C 2.4.1
Location: D:\PROGRA~1\MATLAB\R2007b\sys\lcc

Are these correct?([y]/n):
没有找到编译器,真有点邪门!
回复 不支持

使用道具 举报

发表于 2007-11-15 14:25:39 | 显示全部楼层 来自 陕西西安
具体问题还未查明,不过还是用了替换法去解决的,但略有不同,见我新开的帖子http://www.simwe.com/forum/viewt ... 373&extra=page%3D1  :)
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-16 19:28:56 | 显示全部楼层 来自 新加坡
这个真有点邪门。如果可以的话,不妨把vs2005和matlab的安装路径贴出来,然后在一个dos窗口运行“set”,把结果也贴出来,我们看看能不能找到问题的根源。
回复 不支持

使用道具 举报

发表于 2007-11-16 21:16:45 | 显示全部楼层 来自 陕西西安
原帖由 taohe 于 2007-11-16 19:28 发表
这个真有点邪门。如果可以的话,不妨把vs2005和matlab的安装路径贴出来,然后在一个dos窗口运行“set”,把结果也贴出来,我们看看能不能找到问题的根源。

VS2005  D:\Program Files\Microsoft Visual Studio 8
MATLAB  D:\Program Files\MATLAB\R2007b
在MATLAB下调用CMD命令结果如下:
  1. >> !set
  2. ALLUSERSPROFILE=C:\Documents and Settings\All Users
  3. APPDATA=C:\Documents and Settings\breezee\Application Data
  4. CommonProgramFiles=C:\Program Files\Common Files
  5. COMPUTERNAME=709-320
  6. ComSpec=C:\WINDOWS\system32\cmd.exe
  7. CPU=x86
  8. FP_NO_HOST_CHECK=NO
  9. HOMEDRIVE=C:
  10. HOMEPATH=\Documents and Settings\breezee
  11. KMP_HANDLE_SIGNALS=0
  12. KMP_STACKSIZE=524288
  13. LOGONSERVER=\\709-320
  14. MATLAB_ARCH=win32
  15. NUMBER_OF_PROCESSORS=2
  16. OMP_NUM_THREADS=1
  17. OS=Windows_NT
  18. Path=D:\Program Files\MATLAB\R2007b\bin\win32;D:\Program Files\MATLAB\R2007b\sys\java\jre\win32\jre1.6.0\bin;D:\Program Files\MATLAB\R2007b\sys\webrenderer\windows\corecomponents;D:\Program Files\MATLAB\R2007b\sys\webrenderer\windows;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;d:\Program Files\MATLAB\R2007b\bin;d:\Program Files\MATLAB\R2007b\bin\win32
  19. PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
  20. PROCESSOR_ARCHITECTURE=x86
  21. PROCESSOR_IDENTIFIER=x86 Family 15 Model 6 Stepping 4, GenuineIntel
  22. PROCESSOR_LEVEL=15
  23. PROCESSOR_REVISION=0604
  24. ProgramFiles=C:\Program Files
  25. PROMPT=$P$G
  26. SESSIONNAME=Console
  27. SystemDrive=C:
  28. SystemRoot=C:\WINDOWS
  29. TEMP=C:\DOCUME~1\breezee\LOCALS~1\Temp
  30. TMP=C:\DOCUME~1\breezee\LOCALS~1\Temp
  31. USERDOMAIN=709-320
  32. USERNAME=breezee
  33. USERPROFILE=C:\Documents and Settings\breezee
  34. VS80COMNTOOLS=D:\Program Files\Microsoft Visual Studio 8\Common7\Tools\
  35. windir=C:\WINDOWS
  36. XPCOM_CHECK_THREADSAFE=0
  37. __KMP_REGISTERED_LIB_664=7908A300-cafe9509-libguide40.lib
  38. >> mex -setup
  39. Please choose your compiler for building external interface (MEX) files:

  40. Would you like mex to locate installed compilers [y]/n? y

  41. Select a compiler:
  42. [1] Lcc-win32 C 2.4.1 in D:\PROGRA~1\MATLAB\R2007b\sys\lcc

  43. [0] None

  44. Compiler:
复制代码
如果说环境变量有问题的话,这些自己都可以设置,或者在那些配置文件里直接修改,我尝试过一些情况,问题依旧。还有,下午在另一台机子上Windows xp sp2(EN)的,结果也同样。。。。

[ 本帖最后由 fspider 于 2007-11-16 21:17 编辑 ]
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-16 21:42:35 | 显示全部楼层 来自 新加坡
的确很奇怪,试试看

  1. mex -setup:msvc80
复制代码

能不能成功。
回复 不支持

使用道具 举报

发表于 2007-11-17 11:49:50 | 显示全部楼层 来自 江苏南京

回复 #1 taohe 的帖子

请问下 能够将matlab中的模糊工具箱变成VC++可以调用的DLL文件吗?
回复 不支持

使用道具 举报

发表于 2007-11-17 18:37:25 | 显示全部楼层 来自 陕西西安
原帖由 taohe 于 2007-11-16 21:42 发表
的确很奇怪,试试看

mex -setup:msvc80

能不能成功。

好像还是不行,看下面的结果:L
  1. >> mex -setup:msvc80

  2. Error: Compiler cannot be found on this system . . .

  3. ??? Error using ==> mex at 208
  4. Unable to complete successfully.
  5. >>
复制代码
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-17 20:33:09 | 显示全部楼层 来自 新加坡
这个问题显得有点诡异了。按理说如果matlab和vs2005各自的安装没有问题的话。matlab应该能找到这个编译器。matlab应该是通过环境变量VS80COMNTOOLS以及Windows Registry "HKEY_CURRENT_USER\SOFTWARE\Microsoft\VisualStudio\8.0"或者

"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0"

你看看这些变量在你的电脑上都对吗?

原帖由 fspider 于 2007-11-13 21:16 发表
干净系统下,安装了MATLAB 2007B+VS2005,同时也修改了msvc80opts、msvc80compp的安装目录,用MEX和MBUILD时却怎么也无法找到VC2005的编译器,请问怎么回事?你用的时候没有问题么?
附注:不想用25楼提到的替 ...


不由得又从头看了一下问题的最初描述,不理解为什么要作上面红色字体的操作?
回复 不支持

使用道具 举报

发表于 2007-11-20 13:33:39 | 显示全部楼层 来自 陕西西安
原帖由 taohe 于 2007-11-17 20:33 发表
这个问题显得有点诡异了。按理说如果matlab和vs2005各自的安装没有问题的话。matlab应该能找到这个编译器。matlab应该是通过环境变量VS80COMNTOOLS以及Windows Registry "HKEY_CURRENT_USER\SOFTWARE\Microsoft ...

我把你说的相关变量的图像贴出来:






这些应该都没问题,而出现的问题确实奇怪,不知道是不是与我的VS2005版本(8.0.50727.42 RTM)有关。
哦,对了,还有那个安装目录,是指那两个批处理接口文件中的
  1. set VSINSTALLDIR=%VS80COMNTOOLS%\..\..
  2. 改成 set VSINSTALLDIR=D:\Program Files\Microsoft Visual Studio 8
复制代码

[ 本帖最后由 fspider 于 2007-11-20 13:37 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-20 21:43:20 | 显示全部楼层 来自 新加坡
抱歉,我实在看不出问题出在那里。这个只能算作一个悬案了。真可惜。

Registry和环境变量看不出有什么不对的地方。再说了,你的vs2005是可以用的,而且你用手工方式配置mex后,也可以在matlab中使用vs2005,真是奇怪。

我的vs2005版本是8.0.50727.762,但是我看不出这个会是问题的根源。

另外的办法就是如果你懂perl的话,可以调试mex的配置程序。matlab是通过几个perl脚本搜索安装好的compiler以及完成配置的。看看这样能不能找到问题。可惜我不懂perl。
回复 不支持

使用道具 举报

 楼主| 发表于 2007-11-20 22:03:32 | 显示全部楼层 来自 新加坡
或者再试一下,在运行“mex -setup“之前,先运行

  1. D:\Program Files\Microsoft Visual Studio\VC98\Bin\VCVARS32.BAT
复制代码
回复 不支持

使用道具 举报

发表于 2007-11-21 13:20:57 | 显示全部楼层 来自 陕西西安
原帖由 taohe 于 2007-11-20 21:43 发表
抱歉,我实在看不出问题出在那里。这个只能算作一个悬案了。真可惜。

Registry和环境变量看不出有什么不对的地方。再说了,你的vs2005是可以用的,而且你用手工方式配置mex后,也可以在matlab中使用vs2005, ...

我也不了解perl,这个问题就这样搁着吧,也许什么时候就发现关键所在了。
不过,还是谢谢taohe关注:handshake
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-3-28 17:15 , Processed in 0.045906 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表