目录
FORTRAN语言
生成动态库Demo
查看动态库中的函数
Fortran语言
FORTRAN语言是Formula Translation的缩写,意为“公式翻译”。它是为科学、工程问题或企事业管理中的那些能够用数学公式表达的问题而设计的,其数值计算的功能较强。
FORTRAN语言是世界上第一个被正式推广使用的高级语言。它是1954年被提出来的,1956年开始正式使用,直到2022年已有六十六年的历史,但仍历久不衰,它始终是数值计算领域所使用的主要语言。
Fortran 语言学习(菜鸟都可以看得懂的入门级教程)(持续更新中ing...)_caorui_blog的博客-CSDN博客_fortran
什么是动态库?什么又是静态库?(如何生成/如何使用 ! ! !)_小羊教你来编程的博客-CSDN博客_动态库
生成动态库Demo
前提是当前Linux操作系统需要有gfortran gcc g++等编译器。
sub.f90 :
subroutine Sub_Fortran(NumInt,NumFloat,NumDouble)
// 求幂的函数
implicit none
integer :: NumInt
real :: NumFloat
real(8) :: NumDouble
NumDouble=NumFloat**NumInt
end subroutine
real(8) function Function_Fortran(NumDouble)
// 开方的函数
implicit none
real(8) :: NumDouble
Function_Fortran=sqrt(NumDouble)
end function
main.c:
#include <stdio.h>
void sub_fortran_(int * num_int,float * num_float,double * num_double);// 求幂函数
double function_fortran_(double *);//开方
//
int main()
{
int num_int;
float num_float;
double num_double;
double num;
num_int=4;
num_float=2.0;
sub_fortran_(&num_int,&num_float,&num_double);
num=function_fortran_(&num_double);
// 输出开方后的数 应该是 4
printf("num_int=%d \n num_float=%f \n num_double=%f \n num=%f \n",num_int,num_float,num_double,num+1 );
return 0;
}
在当前目录下依次执行:
gfortran -c -fpic sub.f90 把sub.f90 生成sub.o 目标文件
gfortran -shared -o sub.so sub.o 将sub.o链接生成动态库
// gfortran main.f90 sub.so -o main 如果主函数是用fortran写的可以这样执行
gcc main.c sub.so -o main 生成可执行文件
LD_LIBRARY_PATH=. ./main
显示:
Linux下动态库文件的文件名形如 libxxx.so
,其中so是 Shared Object 的缩写,即可以共享的目标文件。
在链接动态库生成可执行文件时,并不会把动态库的代码复制到执行文件中,而是在执行文件中记录对动态库的引用。
程序执行时,再去加载动态库文件。如果动态库已经加载,则不必重复加载,从而能节省内存空间。
Linux下生成和使用动态库的步骤如下:
- 编写源文件。
- 将一个或几个源文件编译链接,生成共享库。
- 通过
-L<path> -lxxx
的gcc选项链接生成的libxxx.so。 - 把libxxx.so放入链接库的标准路径,或指定
LD_LIBRARY_PATH
,才能运行链接了libxxx.so的程序。
查看动态库中的函数
通过下列指令查看fortran文件中导出的函数
nm -D XXX.so
readelf -s XXX.so
中间一栏是T的代表导出的函数名