英特尔 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 编译函数以期望指针(指向某物的副本)。要使其期望值,请同时使用 value
和 bind(C)
.
我正在尝试 运行 来自 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 编译函数以期望指针(指向某物的副本)。要使其期望值,请同时使用 value
和 bind(C)
.