Linker Fortran语言绑定错误:为什么赢';它是否链接到MPI库?

Linker Fortran语言绑定错误:为什么赢';它是否链接到MPI库?,linker,fortran,mpi,linker-errors,language-binding,Linker,Fortran,Mpi,Linker Errors,Language Binding,我正在尝试为消息传递接口创建语言绑定,但编译器无法识别我对C函数的引用 我目前正在linux机器上使用gfortran作为编译器。。。我知道语言绑定可以工作,但每当我尝试将它们链接到mpi库时,就会出现以下错误: /tmp/ccwukrNT.o: In function `MAIN__': hello_init.f90:(.text+0x17): undefined reference to `mpi_init' collect2: error: ld returned

我正在尝试为消息传递接口创建语言绑定,但编译器无法识别我对C函数的引用

我目前正在linux机器上使用gfortran作为编译器。。。我知道语言绑定可以工作,但每当我尝试将它们链接到mpi库时,就会出现以下错误:

    /tmp/ccwukrNT.o: In function `MAIN__':
    hello_init.f90:(.text+0x17): undefined reference to `mpi_init'
    collect2: error: ld returned 1 exit status
我当前使用的编译命令有:

    gfortran -ffree-form foo.f90 ~/dir1/dir2/bar.f90 -o <outfile> -L  
    /home/.fakeroot/lib -I /home/.fakeroot/include/ -lexampi
我使用的C函数很简单。。。它只是与PMPI_Init()进行接口。。。无论如何,图书馆链接是主要的问题。。。是的,我已经从C++中把它化了。 以下是我编写的简单测试程序:

    program hello_init
    use mpi_f08, only : MPI_Init
    implicit none
    integer :: ierror
    ierror = 0
    call MPI_Init(ierror)
    stop
    end program hello_init
我不太熟悉Fortran。。。这是给我的一个附带项目,但它很快就占用了我整个星期的时间,同时我又哭又笑


谢谢

那么,图书馆的符号是什么?而且,您没有向我们展示任何Fortran代码,所以我们不知道您是否是ISO C绑定。顺便问一下,您使用的是什么MPI实现?我所熟悉的两个开源MPI库都带有Fortran绑定。小写
MPI_init()
不是
C
函数(
MPI_init()
是),如果用C编写Fortran绑定,则必须修改名称以匹配Fortran编译器期望的名称(小写/大写,{0,1,2}尾随下划线)。无论如何,请上传一个@evets我目前正在为一个新的开源MPI库编写绑定:ExaMPI。该语言的名称是Fortran。自1990年以来一直使用Fortran。你没有回答我最初的问题。库中符号的名称是什么?Fortran不区分大小写。您需要使用库中符号的名称作为绑定标签,其中可能包含一些损坏。FORTRAN 66和FORTRAN 77都不包含ISO C绑定功能,因此我认为我们可以取消向后兼容性。另外,请注意,如果引用Backus的原始拼写,在这里键入FORTRAN是不正确的,因为ORTRAN应该是小大写字体。那么,库中的符号是什么?而且,您没有向我们展示任何Fortran代码,所以我们不知道您是否是ISO C绑定。顺便问一下,您使用的是什么MPI实现?我所熟悉的两个开源MPI库都带有Fortran绑定。小写
MPI_init()
不是
C
函数(
MPI_init()
是),如果用C编写Fortran绑定,则必须修改名称以匹配Fortran编译器期望的名称(小写/大写,{0,1,2}尾随下划线)。无论如何,请上传一个@evets我目前正在为一个新的开源MPI库编写绑定:ExaMPI。该语言的名称是Fortran。自1990年以来一直使用Fortran。你没有回答我最初的问题。库中符号的名称是什么?Fortran不区分大小写。您需要使用库中符号的名称作为绑定标签,其中可能包含一些损坏。FORTRAN 66和FORTRAN 77都不包含ISO C绑定功能,因此我认为我们可以取消向后兼容性。另外,请注意,如果引用Backus的原始拼写,那么在这里键入FORTRAN是不正确的,因为ORTRAN应该是小大写字体。
    program hello_init
    use mpi_f08, only : MPI_Init
    implicit none
    integer :: ierror
    ierror = 0
    call MPI_Init(ierror)
    stop
    end program hello_init