我花了一天时间寻找一个应该是一个简单问题的答案。我正在构建一个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));
}