64位Matlab加载库

loadlibrary in 64-bit Matlab?

本文关键字:加载 Matlab 64位      更新时间:2023-10-16

我正试图使用loadlibrary()将c++ API(用于SignalHound.com的BB60C无线电)加载到Matlab中,但它仅在32位Matlab (R2014a)中工作。这里的zip文件包含bb_api.h头文件,并且在各自的文件夹中都有32位和64位的bb_api.dll。要运行它,我将正确的.dll复制到带有bb_api.h的文件夹中,并调用loadlibrary('bb_api','bb_api.h')。虽然这适用于32位版本,但当我在64位Matlab中使用64位.dll时,我得到以下错误:

Error using loadlibrary (line 422)
Building bb_api_thunk_pcwin64 failed.  Compiler output is:
cl -I"C:Program FilesMATLABR2014aexterninclude"  /W3  /nologo  /D_CRT_SECURE_NO_DEPRECATE
/D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0   -I"C:Program FilesMATLABR2014aexterninclude" -I"C:Program
FilesMATLABR2014asimulinkinclude" -I"C:UsersmimhofDocumentsGitHubSDRMatlab"
-I"C:UsersmimhofDocumentsGitHubSDRMatlab" "bb_api_thunk_pcwin64.c" -LD -Fe"bb_api_thunk_pcwin64.dll"
bb_api_thunk_pcwin64.c
C:UsersmimhofDocumentsGitHubSDRMatlabbb_api.h(202) : error C2061: syntax error : identifier 'bbOpenDevice'
C:UsersmimhofDocumentsGitHubSDRMatlabbb_api.h(202) : error C2059: syntax error : ';'
C:UsersmimhofDocumentsGitHubSDRMatlabbb_api.h(202) : error C2059: syntax error : 'type'
C:UsersmimhofDocumentsGitHubSDRMatlabbb_api.h(203) : error C2061: syntax error : identifier 'bbCloseDevice'
C:UsersmimhofDocumentsGitHubSDRMatlabbb_api.h(203) : error C2059: syntax error : ';'
C:UsersmimhofDocumentsGitHubSDRMatlabbb_api.h(203) : error C2059: syntax error : 'type'`

等对于API中可用的所有方法。什么会导致64位而不是32位发生此错误?

谢谢!

您谈论使用c++,但是您的文件被命名为.c,它使用C语言规则触发编译。微软编译器对C语言的支持已经过时了,很可能这就是问题的根源。你可能想用c++来代替。

除此之外,请仔细查看发生错误的行,就像在您自己的代码中修复编译错误一样。

***_thunk.c文件是由matlab附带的perl脚本自动生成的,并且是许多类似错误的来源。

这个事实(自动生成的源代码在c中)是许多文档中看似奇怪的负载库限制和更多未文档的限制的来源。

当遇到非常类似的问题时,我的解决方案是劫持这个自动生成的文件,将其重命名为cpp并构建我自己的cpp版本。这需要一些黑客攻击,因为这个文件的寿命只有几分之一秒。