英特尔 Fortran 调用接收整数的 C 共享库函数时出错

Error Intel Fortran calling C shared library function that receives an integer

我正在尝试 运行 来自 Fortran 的 Linux 共享库 (.so) 的 C 函数。 C 中的函数从 Fortran 程序接收整数。使用英特尔编译器 (2021.3.0) 时,我没有在 C 中得到错误的值,但 gfortran 可以正常工作。似乎有一个我无法识别的类型错误。我正在按照已建立的互操作性语法创建一个抽象接口 here

C 中的函数:

int print_number(int n)
{
    printf("Hello world! %d\n", n);
    return 0;
}​

Fortran 中的函数

! Interface with shared library
abstract interface
    !% -------------------------------------------------------------------------------
    !% Simulation
    !% -------------------------------------------------------------------------------
    integer function print_number(number)
        use, intrinsic :: iso_c_binding
        implicit none
        integer(c_int), value :: number
    end function print_number
end interface

调用print_number(2)时的输出:

世界,您好! 734920112

我附上文件以重现错误 here。首先,执行./compile.sh,然后./run_test

如果有人能指出我做错了什么,我将不胜感激。

谢谢!

您不应该为此使用 抽象 接口,但问题可能来自于未使用 bind(C).

没有 bind(C) 英特尔 Fortran 编译函数以期望指针(指向某物的副本)。要使其期望值,请同时使用 valuebind(C).