Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:48   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 使用图像处理工具箱编译Matlab共享库

我正在尝试从Matlab编译C共享库。我的Matlab代码使用了很多图像处理功能。因此,编译可以正常进行,但是当我从应用程序中调用dll时,会收到如下消息:
“类型为double的输入参数的未定义函数或方法'XYZ'”。

我已经证明我的论点还可以-这不是类型问题。因此,我尝试将%#function XYZ添加到我的.m文件中,但这无济于事。然后,我尝试在编译命令中使用-a标志:

eval(['mcc -v -N -W lib:cshared -d ' clibdir ' -T link:lib -a edge' allFiles]); 但无法编译为:
Depfun错误:“无法在MATLAB路径上将边缘作为函数定位”

我已经验证了图像处理文件在我的计算机上(我可以从matlab正常运行所有文件),并且我的路径指向包含它们的目录。

我也尝试过将工具箱.m文件复制到我的工作目录中,但是很快就会迅速打包成很多文件。而且,对于某些功能,没有.m-仅是.mex-,而且我还没有找到将mex文件包含到我的.dll中的方法。

我想念什么?



回答:

您是否尝试过使用-a选项包括“图像处理工具箱”文件夹?例如:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images 根据mcc文档 ,此文件夹中的所有文件以及任何子文件夹中的所有文件都添加到CTF存档中,并且文件夹子树保留在CTF存档中。

如果不想包含每个子文件夹,则可以使用通配符模式仅将文件加载到文件夹中:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images\* 如果存在一个子文件夹,而该子文件夹的功能或脚本可能会遮盖父文件夹中的子文件夹,则这可能是必要的。例如,父文件夹C:\Program Files\MATLAB\R2009a\toolbox\images\images\存在edge.m函数,并且其中一个ja子文件夹包含日语帮助文件 (在Windows上),其中一个也称为edge.m您不希望在编译时添加此子文件夹,因此可以:
  1. 暂时删除该子文件夹,添加不带通配符选项的父文件夹(以添加所需的其他子文件夹),然后将该文件夹放回去。
  2. 使用通配符选项添加父文件夹(仅添加文件),然后使用附加的-a命令仅添加所需的子文件夹(例如@strel和private )。 注意:我不确定是否单独添加子文件夹是否将以与选项1相同的方式来维护CTF存档中父目录的文件夹子树!
如果您不想包含可能无法使用的大量文件,则可以尝试使用DEPFUN函数首先获取MATLAB代码的依赖项列表。然后从此列表中可以找到代码使用的特定“图像处理工具箱”功能,并且仅在编译时包括这些功能。既然您是专门询问的,所以此新闻组线程提到了如何包括.mex文件:

mcc ... -a imreconstructmex.mexw32 %# For a 32-bit Windows mex file
注意:我还遇到了一个MathWorks错误报告 (需要登录才能查看),其中提到了在R2009b中使用Windows上的某些“图像处理工具箱”功能编译应用程序时遇到的问题。在上面的链接中提供了一种解决方法。从R2010a开始,此错误已修复。



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 03:29


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.