混合编程:从C调用FORTRAN
我必须做一个从C/C++调用FORTRAN子程序的概念证明。 我不知道我在正确的方向,请引导我 我所做的是 我编写了以下FORTRAN代码混合编程:从C调用FORTRAN,c,linker,fortran,g77,C,Linker,Fortran,G77,我必须做一个从C/C++调用FORTRAN子程序的概念证明。 我不知道我在正确的方向,请引导我 我所做的是 我编写了以下FORTRAN代码 INTEGER*4 FUNCTION Fact (n) INTEGER*4 n INTEGER*4 i, amt amt = 1 DO i = 1, n amt = amt * i END DO Fact = amt END SUBROUTINE Pythagoras (a, b, c) REAL*4 a REAL*4 b REAL*4 c c = SQ
INTEGER*4 FUNCTION Fact (n)
INTEGER*4 n
INTEGER*4 i, amt
amt = 1
DO i = 1, n
amt = amt * i
END DO
Fact = amt
END
SUBROUTINE Pythagoras (a, b, c)
REAL*4 a
REAL*4 b
REAL*4 c
c = SQRT (a * a + b * b)
END
使用g77作为g77.exe-c FORTRANfun.for
我写了下面的c代码
#include <stdio.h>
extern int __stdcall FACT (int n);
extern void __stdcall PYTHAGORAS (float a, float b, float *c);
main()
{
float c;
printf("Factorial of 7 is: %d\n", FACT(7));
PYTHAGORAS (30, 40, &c);
printf("Hypotenuse if sides 30, 40 is: %f\n", c);
}
大部分时间都是因为符号的缘故 f77 comiler标志“-fno下划线”和“-fno第二下划线”将改变对象代码中的默认命名,从而影响链接。可以使用命令nm(即:nm file.o)查看对象文件 注意:FORTRAN中的大小写不保留,在目标文件中用小写字母表示。g77编译器选项“-fsource case lower”是默认值。GNU g77 FORTRAN可以使用编译选项“-fsource case preserve”区分大小写
请参阅大多数情况下,这是由于符号大小写造成的 f77 comiler标志“-fno下划线”和“-fno第二下划线”将改变对象代码中的默认命名,从而影响链接。可以使用命令nm(即:nm file.o)查看对象文件 注意:FORTRAN中的大小写不保留,在目标文件中用小写字母表示。g77编译器选项“-fsource case lower”是默认值。GNU g77 FORTRAN可以使用编译选项“-fsource case preserve”区分大小写 请参阅Zeeshan顶部的,您必须使用指针将变量传递给Fortran:
extern int __stdcall fact(int* n);
extern void __stdcall pythagoras(float* a, float* b, float *c);
在Zeeshan之上,您必须使用指针将变量传递给Fortran:
extern int __stdcall fact(int* n);
extern void __stdcall pythagoras(float* a, float* b, float *c);
这可能是由于不同的符号情况。由于不保留大小写,GNU Fortran在编译时默认将所有符号映射为小写。尝试
extern int\uu stdcall事实(int n)我建议gfortran或其他当前的编译器,而不是g77。gfortran可以编译FORTRAN 77和FORTRAN>=90。77国集团多年来一直没有得到支持。看看Fortran ISO_C_绑定。作为Fortran 2003的一部分,作为语言的一部分,它提供了一种从Fortran(或从C)指定调用C的方法。stackoverflow上有一个标记:fortran-iso-c-binding这可能是由于不同的符号大小写。由于不保留大小写,GNU Fortran在编译时默认将所有符号映射为小写。尝试extern int\uu stdcall事实(int n)我建议gfortran或其他当前的编译器,而不是g77。gfortran可以编译FORTRAN 77和FORTRAN>=90。77国集团多年来一直没有得到支持。看看Fortran ISO_C_绑定。作为Fortran 2003的一部分,作为语言的一部分,它提供了一种从Fortran(或从C)指定调用C的方法。stackoverflow上有一个标签:fortran-iso-c-Binding在执行此操作后,经常会意识到他无法再调用代码中调用的众多fortran库。执行此操作后,经常会意识到他无法再调用代码中调用的众多fortran库。太棒了!!!。。。谢谢,在Zeeshan的回答后,我被撞车了。现在它工作得很好。。。非常感谢!!!杰出的谢谢,在Zeeshan的回答后,我被撞车了。现在它工作得很好。。。非常感谢!!!