Fortran中的C兼容DLL可以从Matlab调用

时间:2017-04-21 09:07:00

标签: c matlab dll fortran intel-fortran

我想在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甚至不加载库。

1 个答案:

答案 0 :(得分:0)

从Matlab调用此库函数的有效语法是:

calllib('addnums', 'addnums', 2, 2)

避免使用库名称中的.dll扩展名非常重要。