面试题答案
一键面试1. 定义导出函数
在Fortran源文件中,使用MODULE
定义模块,将要导出的函数放在模块内,并使用PUBLIC
关键字声明这些函数是可被外部调用的。例如:
MODULE my_lib_module
IMPLICIT NONE
PUBLIC :: my_exported_function
CONTAINS
FUNCTION my_exported_function(a, b) RESULT(res)
REAL, INTENT(IN) :: a, b
REAL :: res
res = a + b
END FUNCTION my_exported_function
END MODULE my_lib_module
2. 编译选项
不同的编译器编译选项略有不同,以gfortran为例:
- 生成位置无关代码:使用
-fPIC
选项,它使生成的代码可以在内存的任何位置执行,这是动态链接库所需要的。 - 生成共享库:使用
-shared
选项来生成动态链接库。
完整的编译命令示例:
gfortran -fPIC -shared -o my_lib.so my_lib.f90
其中,my_lib.so
是生成的动态链接库文件名,my_lib.f90
是包含导出函数定义的Fortran源文件名。
3. 链接使用
在其他程序中使用该动态链接库时,需要在链接阶段指定动态链接库的路径和名称。例如,在C语言程序中调用上述Fortran动态链接库,编译时可以使用:
gcc -o main main.c -L/path/to/ -lmy_lib
这里-L/path/to/
指定动态链接库所在路径,-lmy_lib
指定链接名为my_lib
的库。在Fortran程序中调用动态链接库也需要类似的链接步骤,不同编译器可能有细微差别。