在Ubuntu上,Fortran可以通过使用ISO C Binding来调用C函数。ISO C Binding是一种标准接口,它允许Fortran代码与C代码进行互操作。以下是一些基本步骤,用于在Fortran中调用C函数:
example.c
的文件,内容如下:#include <stdio.h>
void hello_from_c() {
printf("Hello from C!\n");
}
gcc
将C代码编译为共享库(.so
文件)。gcc -fPIC -c example.c -o example.o
gcc -shared -o libexample.so example.o
这将生成一个名为libexample.so
的共享库。
call_c_from_fortran.f90
的文件,内容如下:program call_c_function
use, intrinsic :: iso_c_binding
implicit none
! 声明外部C函数
interface
subroutine hello_from_c() bind(C, name="hello_from_c")
import c_void
end subroutine hello_from_c
end interface
! 调用C函数
call hello_from_c()
end program call_c_function
gfortran
编译Fortran代码,并链接之前创建的共享库。gfortran -o call_c_function call_c_from_fortran.f90 -L. -lexample
这里,-L.
告诉编译器在当前目录中查找库,-lexample
链接名为libexample.so
的库。
./call_c_function
如果一切顺利,你将看到输出:
Hello from C!
请注意,为了确保Fortran和C之间的兼容性,你需要遵循一些命名约定和数据类型匹配规则。例如,Fortran中的函数名通常需要全部大写,并且在调用时可能需要添加下划线。此外,Fortran和C在数据类型上也有所不同,因此在使用ISO C Binding时需要注意这些差异。