在我的Fortran程序中调用SuperLU库

时间:2010-12-24 21:43:55

标签: compilation fortran

我正在尝试运行这个superLU稀疏矩阵求解器,但我似乎无法编译它。我正在用Fortran编写我的程序,所以我试图从我的程序中调用superLU。我正在为fortran使用g95编译器。

http://crd.lbl.gov/~xiaoye/SuperLU/#superlu

如何在Fortran中编译?我试过,它说错误cannot exec 'cc1',找不到文件。我不关心我使用的Fortran编译器,只是我可以从Fortran调用这个superLU。

我对将Fortran与C ++程序联系起来知之甚少,我所做的是g95 -o test f77_main.f hbcode1.f c_fortran_dgssv.c

2 个答案:

答案 0 :(得分:1)

我建议使用Fortran ISO C Binding从Fortran调用C例程,反之亦然。这个绑定是Fortran 2003的一部分,但已经广泛使用了好几年,它告诉Fortran使用C调用约定。它是语言的一部分,因此编译器和平台无关。除了以前的答案,在“混合语言编程”下的gfortran手册中有代码示例。还有很多Fortran接口的例子可以在http://www.lrz.de/services/software/mathematik/gsl/fortran/index.html调用GNU Scientific Library的C例程。

如何编译&链接混合Fortran& C程序...通常更容易使用Fortran编译器进行链接步骤,因为它带来了额外的Fortran运行时库。因此,分两步进行:将C例程编译为目标文件,然后在下一步中编译Fortran例程并链接Fortran例程和预编译的C例程。如果使用C ++,请使用“extern C”使其与C兼容。例如:

gcc -c MyCRoutine.c

gfortran FortranMain.f95 MyCRoutine.o

答案 1 :(得分:0)

解决问题的良好开端可以在之前的答案here中找到。

将.c文件传递给g95看起来有点奇怪。您应该使用GCC编译C文件,然后将生成的.o文件链接到编译的fortran代码。