我想将用C编写的.dll调用到我的Fortran代码中。我知道有人问过类似的问题,但答案似乎对我不起作用。我试着读这个文件如下:
use, intrinsic :: ISO_C_Binding ..。
! ------------------------- including the controller-.dll -------------------------------
interface
subroutine Controller ( data, status, infile, out, msg) bind (C, NAME='Controller .dll')
use, intrinsic :: ISO_C_Binding
real(C_FLOAT), intent(inout) :: data(*)
integer(C_INT), intent(inout) :: status
character(kind=C_CHAR), intent(in) :: infile(*)
character(kind=C_CHAR), intent(in) :: out(*)
character(kind=C_CHAR), intent(inout) :: msg(*)
end subroutine controller
end interface 语法似乎是正确的,因为我没有收到任何错误消息。但是当我试图调用子例程时:
call Controller(ctrl_data,ctrl_status,ctrl_infile,ctrl_out,ctrl_msg)我得到错误消息"error LNK2019:引用函数“MAIN_STRUCTURE.main_structure.obj中未列出的外部符号"Controller”。
此外,我不完全确定把Contoller.dll放在哪里。为了确保可以找到它,它与源代码在同一个文件夹中,也在工作存储库中。
我正在使用ifort编译器和Visual 2019。
我期待着所有的答复。提前谢谢你。
大卫
发布于 2022-08-25 10:05:29
我认为有三个问题:
name in bind(C,name="...")应该是您试图从DLL调用的函数的名称,而不是DLL文件的名称。如果要静态地将库链接到您的程序,则需要导入库,而不是文件。有关如何导出定义并从.DLL文件构建导入库文件的方法,请参见
中)
https://stackoverflow.com/questions/73483390
复制相似问题