我正在尝试修改此代码(作为备份的要点)以使其与 gfortran-gcc 兼容。
- 我删除了
[VALUE]
标签 POINTER
与-fcray-pointer
gfortran 的标志一起使用,而不是[REFERENCE]
标签- 删除了
__stdcall
,因为尝试了#define __stdcall __attribute__((stdcall))
导致warning: ‘stdcall’ attribute ignored [-Wattributes]
现在这就是我所拥有的:
C代码CMAIN.C
:
#include <stdio.h>
extern int FACT_(int n);
extern void 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);
}
FORTRAN 代码FORSUBS.FOR
:
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, cp)
REAL*4 a
REAL*4 b
POINTER (cp, c)
REAL*4 c
c = SQRT (a * a + b * b)
END
Makefile
:_
all:
gfortran -c FORSUBS.FOR -fcray-pointer
gcc -c CMAIN.C
gfortran -o result.out FORSUBS.o CMAIN.o
rm -rf *.o
clean :
rm -rf *.out *~ *.bak *.o
但是我仍然收到错误:
CMAIN.o:在函数“main”中:
CMAIN.C:(.text+0x1d): 未定义对“FACT_(int)”的引用
CMAIN.C:(.text+0x4c): 未定义引用`PYTHAGORAS_(float, float, float*)'
如果您能帮助我知道,我将不胜感激:
- 问题是什么,我该如何解决?
- 修改原始代码以使 gcc-gfortran 与最小更改兼容的最佳方法是什么。