C语言和Fortran的混合编程

    科技2023-10-06  71

    参考文献

    程序文档

    cmain.c文档

    #include"stdio.h" void foo (); int main () { foo (); return 0; }

    fmain.f文档

    ! fmain.f PROGRAM fmain external foo call foo() END

    foo.c文档

    #include <stdio.h> void foo() { printf ("hello world\n"); }

    foo.f文档

    !foo.f SUBROUTINE foo() print *,"hello world" END

    makefile文档

    all:ccmain fcmain cfmain ffmain ccmain: gcc -c foo.c gcc -c cmain.c gcc -o ccmain cmain.o foo.o ./ccmain fcmain: gcc -c foo.c gcc -c fmain.f -ffree-form -fno-underscoring gcc -o fcmain fmain.o foo.o -lgfortran ./fcmain cfmain: gcc -fno-underscoring -ffree-form -c foo.f gcc -c cmain.c gcc -o cfmain cmain.o foo.o -lgfortran ./cfmain ffmain: gcc -fno-underscoring -ffree-form -c foo.f gcc -c fmain.f -ffree-form -fno-underscoring gcc -o ffmain cmain.o foo.o -lgfortran ./ffmain Analysis: nm foo.o nm cmain.o clean: rm -rf *.o ccmain cfmain fcmain ffmain

    程序解释

    U表示在main.o中符号foo是未定义的,需要从外部链接进来。T表示该符号存在于这个目标文件对应的文本文件中,说白了就是有定义的符号。

    Non-numeric character in statement label报错加上-ffree-form即可

    对"gfortran_set_args"未定义的引用,加上-lgfortran即可

    对‘foo_’未定义的引用,-fno-underscoring取消下划线

    编译器(f77)的一个命名规则,没有为什么,它就是把你在fortran中的函数名字全转换成小写,然后在最后加一个下划线。

    对应的四种情况分别是

    C语言主函数调用C语言子函数ccmainC语言主函数调用Fortran子函数cfmainFortran主函数调用C语言子函数fcmainFortrtan主函数调用Fortran子函数ffmain
    Processed: 0.010, SQL: 8