c++调用fortran程序的方法

c++调用fortran程序库主要有两种方法,下面以在windows+mingw(g77,g95)下的例子进行说明:

1. 静态连接

首先要注意fortran和C++程序中函数名称的不同,下面是fortran函数FUNC_NAME编译后的名称:

gcc func_name

pgcc func_name

g77 func_name_

pgf77 func_name_

absf77 func_name

因此,当fortran程序用g77编译时,在c++程序中函数要小写并在右边加下画线。

下面是调用例子。

c fortran程序fr1.f

      SUBROUTINE FR1(N,M,CSTR)

      INTEGER*4 CSTR(1)

C     HERE WE RECEIVE THE C CHAR STRING IN AN INTEGER ARRAY

C     COULD ALSO HAVE USED A BYTE ARRAY

      M=N*N

      WRITE(6,20) (CSTR(L),L=1,3)

   20 FORMAT(' CSTR=',3A4)

      WRITE(6,*) 'DONE'

      RETURN

      END

      

#c++调用程序callfr1.cpp

#include <iostream>

#include <string>

using namespace std;

extern "C" 

{

    void fr1_(int *,int *,char *); //注意函数名是小写

}

int main()

{

   int n=10,nSq;

char szCtest[20];

strcpy(szCtest,"teststring");

fr1_(&n,&nSq,szCtest);

cout << "The square is:" << nSq << endl;

      return 0;

}

 

编译连接方法:

gcc -c callfr1.cpp

g77 -c fr1.f -o fr1.o

ar -r libfr1.a fr1.o c:/mingw/lib/g95main.o

gcc -o callfr1.exe callfr1.cpp -lstdc++ -lfr1 -lf95

 

2. 动态连接

首先编译动态链接库

gcc -shared -o libfr1.dll fr1.f -lg2c

pexports libfr1.dll > libfr1.def

dlltool --dllname libfr1.dll --def libfr1.def --output-lib libfr1.a

 

其次编译C++程序

gcc -c callfr1.cpp

gcc -o callfr1.exe callfr1.cpp -lstdc++ -lfr1 -lf95

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值