Gcc 链接gnu库c++;和fortran

Gcc 链接gnu库c++;和fortran,gcc,fortran,g++,gfortran,Gcc,Fortran,G++,Gfortran,我花了一天的时间寻找一个简单问题的答案。我正在构建一个C++程序来调用相当数量的现有FORTRAN。我先将FORTRAN主程序改为子程序,然后用简单的C++主程序调用它。我的步骤如下所示: gfortran -c f1.f90 f2.f90 ...... g++ -c mn.cpp gfortran -lstdc++ -o prog.exe mn.o f1.o .... mn.cpp一开始看起来像下面的代码,上面的步骤可以正常工作。如果我尝试链接到以下链接,则会出现大量链接器错误: g++ -

我花了一天的时间寻找一个简单问题的答案。我正在构建一个C++程序来调用相当数量的现有FORTRAN。我先将FORTRAN主程序改为子程序,然后用简单的C++主程序调用它。我的步骤如下所示:

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(删除注释)创建一个double数组,并且如果我完全删除对fortran程序的调用(仍然与gfortran链接),我会得到类似的错误。显然,-lstdc++并没有带来所需的所有库。需要哪些库以及如何让它链接它们

我正在使用Windows7和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));
  }
#包括
#包括
//#包括“array.h”
外部“C”{
无效mnf90_90;(常量字符*,整数);
}
int main(int argc,char*argv[]){
//Array2D A;//一阶导数
静态常量char*feos=“d/fld9x.dat”;
int npoint=20;
//double*xc=新的双精度[npoint];
mnf90(feos,strlen(feos));
}

我认为使用
g++
链接器成功的机会更大。无论如何,请在这两种情况下发布链接器输出:它可能会给出一些想法。对库的命令行引用(
-lxxx
)应该遵循引用这些库中符号的目标代码。感谢IanH,这是唯一的问题。将库选项放在末尾,即使用g++-lgfortran运行良好。选项通常应用于整个命令,因此我以前没有遇到过这种情况。使用gcc与-lgfortran-lstdc++进行链接。我认为使用
g++
linker成功的机会更大。无论如何,请在这两种情况下发布链接器输出:它可能会给出一些想法。对库的命令行引用(
-lxxx
)应该遵循引用这些库中符号的目标代码。感谢IanH,这是唯一的问题。将库选项放在末尾,即使用g++-lgfortran运行良好。选项通常应用于整个命令,所以我以前没有遇到过这种情况。