在CentOS系統中,Fortran可以通過使用ISO C Binding來調用C函數。ISO C Binding是Fortran 2003標準的一部分,它提供了一種標準化的方式來調用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_from_fortran
use iso_c_binding, only: c_void
implicit none
interface
subroutine hello_from_c() bind(c, name="hello_from_c")
import c_void
! No arguments and no return value
end subroutine hello_from_c
end interface
! Call the C function
call hello_from_c()
end program call_c_from_fortran
在這個Fortran程序中,我們使用iso_c_binding
模塊來定義與C語言兼容的接口。bind(c, name="hello_from_c")
指定了C函數的名稱,這樣Fortran就可以找到并調用它。
gfortran
編譯器編譯Fortran代碼,并通過-l
選項鏈接到之前創建的共享庫。在終端中運行以下命令:gfortran -o call_c_from_fortran call_c_from_fortran.f90 -L. -lexample
這里-L.
告訴編譯器在當前目錄中查找庫文件,-lexample
則是鏈接名為libexample.so
的庫。
./call_c_from_fortran
如果一切設置正確,你應該會看到輸出:
Hello from C!
這就是在CentOS系統中使用Fortran調用C函數的基本過程。記得在實際應用中,你可能需要處理更復雜的數據類型和接口,這可能需要更詳細的綁定規范和額外的編譯選項。