gfortran-gcc 互換になるように、このコード(バックアップとしての要点)を変更しようとしています。
[VALUE]
タグは外しました- タグの代わりに gfortran のフラグ
POINTER
で使用-fcray-pointer
[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 互換になるように変更する最良の方法は何ですか。
PS1。Redditでも共有されています。 PS2。オペレーティング システムとコンパイラの仕様は、この質問と同じです。