matlab与dll链接总结与整理

matlab与dll链接总结与整理

参考文献

使用Matlab调用动态链接库dll

MATLAB 中的 C 库

问题1:编译正确选项为x64而不是x86
dllAndMatlab_test
错误使用 loadlibrary
加载库 "D:\my-code\dllAndmatlabTest\dll_test.dll" 时出错
D:\my-code\dllAndmatlabTest\dll_test.dll ������Ч�� Win32 Ӧ�ó���
问题2:未添加正确的宏定义选项

问题描述如下

错误使用 loadlibrary
生成 add_dll_thunk_pcwin64 失败。编译器输出为:
cl -I"D:\matlabR2021a\extern\include" /Zp8  /W3  /nologo  -I"D:\my-code\dllAndmatlabTest" -I"D:\my-code\dllAndmatlabTest" "add_dll_thunk_pcwin64.c" -LD
-Fe"add_dll_thunk_pcwin64.dll"
add_dll_thunk_pcwin64.c
D:\my-code\dllAndmatlabTest\add_dll.h(1): error C2059: 语法错误:“字符串”

实际上的头文件应该为:

#ifdef __cplusplus
extern "C" 
{
#endif	
	int __declspec(dllexport) add_dll(int a, int b); 
#ifdef __cplusplus
}
#endif

注意:其中为两个下划线。

附录代码
main.h
#ifdef __cplusplus
extern "C" 
{
#endif	
	int __declspec(dllexport) add_dll(int a, int b); 
#ifdef __cplusplus
}
#endif

#ifdef __cplusplus
extern "C"
{
#endif	
	int __declspec(dllexport) sub_dll(int a, int b);
#ifdef __cplusplus
}
#endif
main.c
#include"main.h"
int add_dll(int a, int b)
{
	return a + b;
}

int sub_dll(int a, int b)
{
	return a - b;
}
dllAndMatlab_test.m
function dllAndMatlab_test
%mex -setup c++
loadlibrary('dll_test.dll','main.h')
libfunctions('dll_test')

N=10;M=10;
error = zeros(N*M,1);
for i=1:N
    for j=1:M
        c = calllib('dll_test','add_dll',i,j);
        error((i-1)*M+j) = c-(i+j);
    end
end
plot(error)
unloadlibrary dll_test
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: loadlibraryMatlab的一个函数,用于动态链接库的加载。如果出现错误,可能是因为动态链接库的路径不正确,或者动态链接库不兼容当前的Matlab版本。需要确保路径正确,并且动态链接库版本与Matlab版本匹配。 ### 回答2: 在使用Matlab中的loadlibrary函数时,有时会出现错误。以下是一些常见的错误和解决方法: 1.错误信息:"The specified module could not be found." 解决方法:这可能是由于库文件路径不正确引起的。请确保库文件的路径是正确的,并在loadlibrary函数中正确指定。 2.错误信息:"Unable to load one or more of the requested types." 解决方法:这可能是由于库文件缺少一些类型定义引起的。请确保库文件中包含所有需要的类型定义,并在loadlibrary函数中正确指定。 3.错误信息:"Invalid MEX-file 'filename': The specified procedure could not be found." 解决方法:这可能是由于使用错误的函数名引起的。请确保在loadlibrary函数中指定的函数名称是正确的,并且与库文件中的函数名称完全匹配。 4.错误信息:"Undefined function or variable 'libraryname'." 解决方法:这可能是由于没有正确加载库文件引起的。请确保已正确加载库文件,并在loadlibrary函数中使用正确的库文件名称。 总之,大多数loadlibrary函数的错误都由于路径问题、类型定义问题、函数名称不匹配或库文件未加载等原因引起。正确解决这些问题需要仔细检查代码,并确保正确地指定相关参数。 ### 回答3: loadlibraryMATLAB 中一个用于动态链接库加载的函数,使用它可以加载外部 DLL 或者共享对象库,将其作为 MATLAB 的一个函数库来使用,从而提高 MATLAB 的功能性。然而,在使用 loadlibrary 的过程中,有时候会出现一些错误,我们需要找到相应的解决方法。 1. 错误信息:Could not load the DLL xxxx.dll 这个错误常常是由于要加载的 DLL 文件或者其依赖的库文件没有加到系统 PATH 环境变量里面所引起的。解决这个问题的方法就是找到所需要的 DLL 或者库文件的路径,然后在 MATLAB 中添加路径。可以使用 addpath 函数或者 Set Path 工具箱来解决问题。 2. 错误信息:Undefined function or variable 'libname' 当你调用 loadlibrary 的时候,你需要指定一个调用 DLL 的别名,这个别名在后面你调用 DLL 的时候会用到。很多时候这里写错了别名,或者忘记给代表这个别名的字符串变量赋值了。这里的解决方法就是检查你写的这个别名是否正确,并且确认代表这个别名的字符串变量已经赋值。 3. 错误信息:The system cannot find the specified file 这个错误是由于 loadlibrary 所指定的 DLL 文件无法被找到,常常是由于 DLL 文件不存在,或者路径有误所引起。解决这个问题的方法就是找到正确的 DLL 文件的路径,或者确认 DLL 文件已经正确放置。 4. 错误信息:Cannot open include file 'header.h' 这个错误是由于要加载的 DLL 依赖的头文件没有在 MATLAB 中被找到所引起的。解决这个问题的方法就是找到正确的头文件路径,然后在 MATLAB 中添加路径。同样地,你可以使用 addpath 函数或者 Set Path 工具箱来解决问题。 总之,错误使用 loadlibrary 的情况可能很复杂,但这些解决方法通常适用于绝大部分要出现的错误。如果你的问题不在上面列举的范畴内,你也可以查阅 MATLAB 的文档或者支持论坛以获得更详细的解决方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值