我正在尝试使用loadlibrary()将C ++ API(用于SignalHound.com上的BB60C无线电)加载到Matlab中,但它仅适用于32位Matlab(R2014a)。 zip文件here包含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 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位?
谢谢!
答案 0 :(得分:0)
您谈到使用C ++,但您的文件名为.c
,它使用C语言规则触发编译。 Microsoft编译器的C支持已经过时了,而且很可能是您的问题的根源。您可能希望使用C ++。
除此之外,仔细查看发生错误的行,就像您在自己的代码中修复编译错误一样。
答案 1 :(得分:0)
*** _ thunk.c文件由matlab附带的perl脚本自动生成,是许多类似错误的来源。
这个事实(自动生成的thunk源在c中)是许多记录似乎很奇怪的loadlibrary limitations以及更多未记录的来源的来源。
我的解决方案遇到一个非常类似的问题是劫持这个自动生成的文件,将其重命名为cpp并构建我自己的thpp版本。这需要一些黑客攻击,因为这个文件的生命周期只有几分之一秒。 Full details are here