我正在尝试使用loadlibrary()将Matlab (用于SignalHound.com上的BB60C无线电)加载到Matlab中,但它只能在32位C++ (R2014a)中工作。压缩文件here包含bb_api.h头文件,并在各自的文件夹中同时包含32位和64位bb_api.dll。要运行它,我用bb_api.h将正确的.dll复制到文件夹中,然后调用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 Files\MATLAB\R2014a\extern\include" /W3 /nologo /D_CRT_SECURE_NO_DEPRECATE
/D_SCL_SECURE_NO_DEPRECATE /D_SECURE_SCL=0 -I"C:\Program Files\MATLAB\R2014a\extern\include" -I"C:\Program
Files\MATLAB\R2014a\simulink\include" -I"C:\Users\mimhof\Documents\GitHub\SDR\Matlab"
-I"C:\Users\mimhof\Documents\GitHub\SDR\Matlab" "bb_api_thunk_pcwin64.c" -LD -Fe"bb_api_thunk_pcwin64.dll"
bb_api_thunk_pcwin64.c
C:\Users\mimhof\Documents\GitHub\SDR\Matlab\bb_api.h(202) : error C2061: syntax error : identifier 'bbOpenDevice'
C:\Users\mimhof\Documents\GitHub\SDR\Matlab\bb_api.h(202) : error C2059: syntax error : ';'
C:\Users\mimhof\Documents\GitHub\SDR\Matlab\bb_api.h(202) : error C2059: syntax error : 'type'
C:\Users\mimhof\Documents\GitHub\SDR\Matlab\bb_api.h(203) : error C2061: syntax error : identifier 'bbCloseDevice'
C:\Users\mimhof\Documents\GitHub\SDR\Matlab\bb_api.h(203) : error C2059: syntax error : ';'
C:\Users\mimhof\Documents\GitHub\SDR\Matlab\bb_api.h(203) : error C2059: syntax error : 'type'`对于API中所有可用的方法,依此类推。什么会导致此错误在64位而不是32位中发生?
谢谢!
发布于 2014-08-07 02:42:50
您谈到了使用C++,但是您的文件名为.c,这将触发使用C语言规则进行编译。Microsoft编译器的C支持非常过时,这很可能是问题的根源。您可能希望改用C++。
除此之外,仔细查看出现错误的行,就像在自己的代码中修复编译错误一样。
发布于 2016-07-16 03:31:34
***_thunk.c文件是由matlab附带的perl脚本自动生成的,并且是许多类似错误的来源。
这一事实(自动生成的thunk源代码在c中)是许多有记录的看似奇怪的loadlibrary limitations和更多未记录的more的来源。
当遇到非常类似的问题时,我的解决方案是劫持这个自动生成的文件,将其重命名为cpp,并构建我自己的cpp版本的thunk。这需要一些修改,因为这个文件的生命周期只有几分之一秒。Full details are here。
https://stackoverflow.com/questions/25167455
复制相似问题