Tag: gfortran

重复从Fortran调用C函数时出现分段错误

我有一个Fortran 90程序,它反复调用C函数。 第一次使用该函数一切顺利,但第二次代码尝试访问该函数时,它会出现以下错误: 程序接收信号SIGSEGV:分段故障 – 无效的存储器参考。 我在Windows上使用gfortran v.4.6,链接到我没有源代码的库。 该库作为DLL来到我身边,我使用gendef和dlltool来创建一个链接到的.a库。 代码如下: PROGRAM cmod USE, INTRINSIC :: ISO_C_BINDING INTERFACE LOGICAL (C_BOOL) FUNCTION clover(scen,reg,soil,top,rain,depth,numd,nums,numb, numd,addn,srate,stype,nloss,ploss,ErrStr) BIND (C, name = “ClOvr”) USE, INTRINSIC :: ISO_C_BINDING INTEGER (C_INT), INTENT(IN), VALUE :: scen,reg,soil,topo,depth REAL (C_DOUBLE), INTENT(IN), VALUE :: rain,numd,nums,numb,numd REAL (C_DOUBLE), INTENT(IN), VALUE :: addn,srate INTEGER (C_INT), INTENT(IN), VALUE :: stype […]

编写将函数返回给Fortran的C函数

最后,我试图编写一个IPC计算器,利用Fortran计算和C来传递两个Fortran程序之间的数据。 当我完成它将希望看起来像: Fortran program to pass input -> Client written in C -> Server written in C -> Fortran program to calculate input and pass ans back C客户端/服务器部分已完成,但目前我仍然试图编写一个在Fortran程序中输入的程序,将其传递给计算答案的C程序。 但是,我看到了一些奇怪的行为。 Fortran计划 program calculator !implicit none ! type declaration statements integer x x = 1 ! executable statements x = calc(1,1) print *, x end program calculator […]

无法链接到libgfortran.a

我在我的系统上安装了gfortran,文件libgfortran.a可以在/usr/lib/gcc/x86_64-linux-gnu/4.6/找到。 使用nm我确保函数_gfortran_compare_string在那里定义: $ nm /usr/lib/gcc/x86_64-linux-gnu/4.6/libgfortran.a | grep _gfortran_compare_string 返回 0000000000000000 T _gfortran_compare_string 0000000000000000 T _gfortran_compare_string_char4 但是,我的CUDA-C程序的链接器会抛出错误: /usr/local/cuda-6.0/bin/nvcc –cudart static -L/usr/lib/gcc/x86_64-linux-gnu/4.6 -L/home/chung/lapack-3.5.0 -link -o “pQP” ./src/pQP.o -lgfortran -llapacke -llapack -lcublas -lblas -lcurand nvcc warning : The ‘compute_10’ and ‘sm_10′ architectures are deprecated, and may be removed in a future release. /home/chung/lapack-3.5.0/liblapack.a(ilaenv.o): In function `ilaenv_’: ilaenv.f:(.text+0x81): undefined […]

使用gdb进行gfortran调试:w_powf.c:没有这样的文件或目录

我有一个Fortran程序,我正在调试。 我有一个可变数据列表,其中一个预期变量几乎是其预期值的两倍。 所以我用调试标志编译了程序,并开始调试:程序名称是hfock $gdb hfock (gdb) break hfock (gdb) run Starting program: /home/e/Desktop/hfock hfock Breakpoint 1, hfock () at hfock.f:16 16 ZETA1 = 2.173171 (gdb) s 17 ZETA2 = 1.188530 (gdb) s 18 WRITE (*, ‘( “Zeta1:”, F7.4 / “Zeta2:”, F7.4 )’ ) ZETA1, ZETA2 (gdb) s Zeta1: 2.1732 Zeta2: 1.1885 21 PLUS=ZETA1+ZETA2 (gdb) s […]

对’d1mach_’的未定义引用

我正在尝试将一个fortran子例程与c ++链接起来,但是不能完全弄清楚这里到底出了什么问题:fortran子例程调用了一些函数,例如。 d1mach或xermsg,它们未在fortran子例程中定义,但在外部调用。 编译时,错误是“对d1mach _”(或xermsg)的未定义引用。 我试图链接一个我认为可能包含所述函数的库(在库中似乎有一个名为d1mach.o和xermsg.o的文件),但同样的错误仍然存​​在。 我可能做错了什么? extern”C” { void drc3jm_(double *L1,double *L2,double *L3,double *M1,double *M2MIN, double *M2MAX,double *THRCOF,int *NDIM,int *IER); } 这是我用来调用子例程的函数,并没有在iostream旁边使用任何新的头文件 *DECK DRC3JM SUBROUTINE DRC3JM (L1, L2, L3, M1, M2MIN, M2MAX, THRCOF, NDIM, + IER) CALL XERMSG(‘SLATEC’,’DRC3JM’,’L1-ABS(M1) less than zero or ‘// + ‘L1+ABS(M1) not integer.’,IER,1) 这是fortran子例程的声明,它调用未声明的函数xermsg。 我使用-L / path / lib指令链接库但无济于事。 子程序用于计算数学函数,是slatec代码的一部分。 […]