linux下c/c++与古老的fortran混合编程问题
小弟在网上也找到一些资料,但是大多是基于windows下的,编译软件也尽是vc和visual fortran。
按照网上资料的介绍,修改c/c++源程序,可是在linux下用gcc编译竟无法通过。混合编程是先单独编译c/c++源程序和fortran程序生成obj,然后将两者link就ok,可现在对这方面一无所知。不知道哪位大侠能给出详细的解决方案,既能让c/c++调用fortran,又能让fortran调用c/c++,在下感激不尽。
附:简单的出错程序
c源程序(main.c):
#include <stdio.h>
#ifdef _cplusplus
extern "c" void {
#endif
extern void _stdcall fortran( );
#define fortran FORTRAN
#ifdef _cplusplus
}
#endif
void main()
{
FORTRAN();
}
fortran 程序(forfun.for):
SUBROUTINE FORTRAN()
print *,5
END
用gcc编译c源程序时,
>>gcc -c main.c
>>main.c:9: syntax error before "fortran"
main.c:9: warning: data definition has no type or storage class
main.c: In function `main':
main.c:16: warning: return type of `main' is not `int'
不知道怎么回事??
后来我将main.c里面的_stdcall去掉,进行如下编译:
>>gcc -c main.c
>>main.c: In function `main':
main.c:16: warning: return type of `main' is not `int'
>>f77 -c forfun.for
>>gcc -o main main.o forfun.o
>>main.o(.text+0x11): In function `main':
: undefined reference to `FORTRAN'
forfun.o(.text+0xf): In function `fortran_':
: undefined reference to `s_wsle'
forfun.o(.text+0x28): In function `fortran_':
: undefined reference to `do_lio'
forfun.o(.text+0x30): In function `fortran_':
: undefined reference to `e_wsle'
collect2: ld returned 1 exit status
要崩溃了,哪位大侠能助我啊,感谢不尽。到底怎样才能实现c/c++与fortran之间的相互自由调用?