首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合编程:从C调用FORTRAN

混合编程:从C调用FORTRAN
EN

Stack Overflow用户
提问于 2014-05-15 04:38:28
回答 2查看 469关注 0票数 1

我必须对从C/C++调用FORTRAN子程序的概念做一个证明。我不知道我的方向是什么,请指引我.

我所做的是..。

我编写了以下FORTRAN代码

代码语言:javascript
复制
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代码写的..。

代码语言:javascript
复制
#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,我得到了以下错误.

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-15 08:14:09

在Zeeshan answer之上,您必须使用指针将变量传递给Fortran:

代码语言:javascript
复制
extern int __stdcall fact(int* n);
extern void __stdcall pythagoras(float* a, float* b, float *c);
票数 2
EN

Stack Overflow用户

发布于 2014-05-15 04:57:20

大部分时间都是因为符号的情况。

f77标记“-fno-下划线”和“-FNO-秒-下划线”将更改目标代码中的默认命名,从而影响链接。您可以使用命令nm (即:nmfile.o)查看对象文件。

注意: FORTRAN中的大小写没有保留,而是在对象文件中用小写表示。默认情况下,g77编译器选项"-fsource-case-lower“。GNU g77 FORTRAN可以通过编译选项“-fsource- case -保存”区分大小写。

参考THIS

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23669364

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档