我想在Fortran中创建一个与C兼容的DLL,以便稍后从Matlab调用它。
我使用addnums.f90中的以下fortran代码创建* .dll:
function addnums(val1, val2) bind(c, name='addnums')
!DEC$ ATTRIBUTES DLLEXPORT :: addnums
use iso_c_binding, only: c_float
implicit none
real(c_float), intent(in) :: val1, val2
real(c_float) :: addnums
addnums = val1 + val2
end function
以及以下头文件addnums.h:
float addnums(float *val1, float *val2);
然后我运行以下matlab脚本addnums_test.m:
loadlibrary('addnums.dll','addnums.h');
addnums(2, 2);
并收到以下错误:
Undefined function or variable 'addnums'.
Error in addnums_test (line 2)
addnums(2, 2);
为什么函数'addnums'未定义?我该如何解决这个问题?
更新
calllib('addnums.dll', 'addnums', 2, 2);
和
libfunctions(addnums);
产生相同的错误,所以我的猜测是库本身没有正确编译
*我使用Visual Studio Community 2015与英特尔Fortran编译器15和Matlab R2016b x64。在构建.dll时,我使用x64配置,否则Matlab甚至不加载库。
答案 0 :(得分:0)
从Matlab调用此库函数的有效语法是:
calllib('addnums', 'addnums', 2, 2)
避免使用库名称中的.dll扩展名非常重要。