Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我正在尝试从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您不希望在编译时添加此子文件夹,因此可以:
mcc ... -a imreconstructmex.mexw32 %# For a 32-bit Windows mex file 注意:我还遇到了一个MathWorks错误报告 (需要登录才能查看),其中提到了在R2009b中使用Windows上的某些“图像处理工具箱”功能编译应用程序时遇到的问题。在上面的链接中提供了一种解决方法。从R2010a开始,此错误已修复。 更多&回答... |
![]() |
![]() |