链接gnu库c ++和fortran

时间:2016-08-10 21:58:38

标签: gcc fortran g++ gfortran

我花了一天时间寻找一个应该是一个简单问题的答案。我正在构建一个c ++程序来调用相当大量的现有fortran。我首先将fortran main更改为子例程,然后使用简单的c ++ main调用它。我的步骤如下:

gfortran -c f1.f90 f2.f90 ......
g++ -c mn.cpp
gfortran -lstdc++ -o prog.exe mn.o f1.o ....

mn.cpp看起来像下面的代码,上面的步骤确实可行。如果我尝试链接,我会收到许多链接器错误:

g++ -lgfortran (this never works!)

接下来,我尝试实例化一个简单的数组类(删除2条注释行)。这产生了关于gxx_personality_seh0,vtable和operator new的链接器错误。如果我只是用new创建一个双精度数组(删除注释),并且如果我完全删除了对fortran程序的调用(仍然与gfortran链接),我会得到类似的错误。显然,-lstdc ++并没有引入所有需要的库。需要哪些库以及如何将它们链接起来?

我正在使用Windows 7和Cygwin。它链接的库是... lib / x86_64-pc-cygwin / 4.9.3。如果它有用,我可以发布链接器输出。

mn.cpp有效(代码注释掉)如下:

  #include <string.h>
  #include <stdlib.h>
  //#include "array.h"
  extern "C" {
     void mnf90_(const char*,int);
  }
  int main(int argc, char* argv[]){
  //   Array2D A;     // first derivative
     static const char *feos = "d/fld9x.dat";
     int npoint = 20;
  //   double *xc = new double[npoint];
     mnf90_(feos,strlen(feos));
  }

0 个答案:

没有答案