使用图像处理工具箱编译Matlab共享库

时间:2010-09-27 14:05:37

标签: matlab matlab-deployment matlab-compiler

我正在尝试从matlab编译c共享库。我的matlab代码使用了很多图像处理功能。因此,编译很顺利,但是当我从我的应用程序调用dll时,我会收到类似“未定义函数或方法'XYZ'的消息,用于类型为double的输入参数”。我已经证实我的论据没问题 - 这不是类型问题。所以,我尝试将%#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中。

我错过了什么?

1 个答案:

答案 0 :(得分:2)

您是否尝试使用-a选项添加图像处理工具箱文件夹?例如:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images

根据mcc documentation,此文件夹中的所有文件以及任何子文件夹中的所有文件都将添加到CTF存档中,文件夹子树将保留在CTF存档中。

如果您不想包含每个子文件夹,则只能使用通配符模式加载文件夹中的文件:

mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images\*

如果有一个子文件夹可能包含可以隐藏父文件夹中的文件的子文件夹,则可能需要这样做。例如,父文件夹edge.m中有C:\Program Files\MATLAB\R2009a\toolbox\images\images\个函数,并且有一个ja subfolder that contains Japanese language help files(在Windows上),其中一个也称为edge.m。您不希望在编译时添加此子文件夹,因此您可以:

  1. 暂时删除该子文件夹,添加不带通配符选项的父文件夹(添加您想要的其他子文件夹),然后放回该文件夹。

  2. 使用通配符选项添加父文件夹(仅添加文件),然后单独添加所需的子文件夹(例如@strelprivate)并附加{{ 1}}命令。 注意:我不确定是否单独添加子文件夹将以与选项#1相同的方式维护CTF存档中父目录的文件夹子树!

  3. 如果您不想包含可能最终未被使用的大量文件列表,则可以尝试使用函数DEPFUN来首先获取MATLAB代码的依赖项列表。然后,从此列表中,您可以找到代码使用的特定图像处理工具箱功能,并仅包括编译时的功能。由于您特别询问,this newsgroup thread提到了如何包含.mex文件:

    -a


    注意:我遇到了MathWorks bug report(您需要登录才能看到),提到在R2009b中使用Windows上的某些图像处理工具箱功能编译应用程序时出现问题。上面的链接有一个解决方法。从R2010a开始修复此错误。