我必须对从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 = 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);
}使用Visual编译器作为cl /c new.c编译它
当我试图链接时,作为LINK new.obj FORTRANfun.o,我得到了以下错误.
new.obj : error LNK2019: unresolved external symbol _FACT@4 referenced in function _main
new.obj : error LNK2019: unresolved external symbol _PYTHAGORAS@12 referenced in function _main
new.exe : fatal error LNK1120: 2 unresolved externals发布于 2014-05-15 08:14:09
在Zeeshan answer之上,您必须使用指针将变量传递给Fortran:
extern int __stdcall fact(int* n);
extern void __stdcall pythagoras(float* a, float* b, float *c);发布于 2014-05-15 04:57:20
大部分时间都是因为符号的情况。
f77标记“-fno-下划线”和“-FNO-秒-下划线”将更改目标代码中的默认命名,从而影响链接。您可以使用命令nm (即:nmfile.o)查看对象文件。
注意: FORTRAN中的大小写没有保留,而是在对象文件中用小写表示。默认情况下,g77编译器选项"-fsource-case-lower“。GNU g77 FORTRAN可以通过编译选项“-fsource- case -保存”区分大小写。
参考THIS
https://stackoverflow.com/questions/23669364
复制相似问题