![]() |
使用图像处理工具箱编译Matlab共享库
我正在尝试从Matlab编译C共享库。我的Matlab代码使用了很多图像处理功能。因此,编译可以正常进行,但是当我从应用程序中调用dll时,会收到如下消息:
[INDENT] “类型为double的输入参数的未定义函数或方法'XYZ'”。 [/INDENT]我已经证明我的论点还可以-这不是类型问题。因此,我尝试将%#function XYZ添加到我的.m文件中,但这无济于事。然后,我尝试在编译命令中使用-a标志: eval(['mcc -v -N -W lib:cshared -d ' clibdir ' -T link:lib -a edge' allFiles]); 但无法编译为: [INDENT] Depfun错误:“无法在MATLAB路径上将边缘作为函数定位” [/INDENT]我已经验证了图像处理文件在我的计算机上(我可以从matlab正常运行所有文件),并且我的路径指向包含它们的目录。 我也尝试过将工具箱.m文件复制到我的工作目录中,但是很快就会迅速打包成很多文件。而且,对于某些功能,没有.m-仅是.mex-,而且我还没有找到将mex文件包含到我的.dll中的方法。 我想念什么? [B]回答:[/B] 您是否尝试过使用-a选项包括“图像处理工具箱”文件夹?例如: mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images 根据[URL="http://www.mathworks.com/help/toolbox/compiler/mcc.html"]mcc文档[/URL] ,此文件夹中的所有文件以及任何子文件夹中的所有文件都添加到CTF存档中,并且文件夹子树保留在CTF存档中。 如果不想包含每个子文件夹,则可以使用通配符模式仅将文件加载到文件夹中: mcc ... -a C:\Program Files\MATLAB\R2009a\toolbox\images\images\* 如果存在一个子文件夹,而该子文件夹的功能或脚本可能会遮盖父文件夹中的子文件夹,则这可能是必要的。例如,父文件夹C:\Program Files\MATLAB\R2009a\toolbox\images\images\存在edge.m函数,并且其中一个[URL="http://www.mathworks.com/matlabcentral/newsreader/view_thread/265034"]ja子文件夹包含日语帮助文件[/URL] (在Windows上),其中一个也称为edge.m您不希望在编译时添加此子文件夹,因此可以: [LIST=1][*]暂时删除该子文件夹,添加不带通配符选项的父文件夹(以添加所需的其他子文件夹),然后将该文件夹放回去。 [*]使用通配符选项添加父文件夹(仅添加文件),然后使用附加的-a命令仅添加所需的子文件夹(例如@strel和private )。 [B]注意:我不确定是否单独添加子文件夹是否将以与选项1相同的方式来维护CTF存档中父目录的文件夹子树![/B] [/LIST]如果您不想包含可能无法使用的大量文件,则可以尝试使用[URL="http://www.mathworks.com/help/techdoc/ref/depfun.html"]DEPFUN[/URL]函数首先获取MATLAB代码的依赖项列表。然后从此列表中可以找到代码使用的特定“图像处理工具箱”功能,并且仅在编译时包括这些功能。既然您是专门询问的,所以[URL="http://www.mathworks.de/matlabcentral/newsreader/view_thread/289680"]此新闻组线程[/URL]提到了如何包括.mex文件: mcc ... -a imreconstructmex.mexw32 %# For a 32-bit Windows mex file [B]注意:[/B]我还遇到了一个[URL="http://www.mathworks.com/support/bugreports/581700"]MathWorks错误报告[/URL] (需要登录才能查看),其中提到了在R2009b中使用Windows上的某些“图像处理工具箱”功能编译应用程序时遇到的问题。在上面的链接中提供了一种解决方法。从R2010a开始,此错误已修复。 [url=https://stackoverflow.com/questions/3804585]更多&回答...[/url] |
所有时间均为北京时间。现在的时间是 23:31。 |
Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.