linux-链接到modules文件夹提供了未定义的参考

如果我正确理解了手册,则应该在文件夹中创建一个包含fortran模块的文件,例如/path/mods/test_mod.f90:

module test_mod
implicit none
save

contains

function prod(a,b) result(c)
real :: a,b,c

c=a*b
return
end function
end module

并像这样编译:

gfortran -c test_mod.f90

并创建另一个文件,例如/path/bins/test_prog.f90,即:

program test_prog

use test_mod
real :: x,y,z

x=4e0
y=5e0
z=prod(x,y)
print*,z
end

并像这样编译:

gfortran -I/path/mods -o test_prog test_prog.f90

但是由于某种原因,我在Mac上收到链接器错误,说:

Undefined symbols for architecture x86_64:
  "___test_mod_MOD_prod", referenced from:
      _MAIN__ in ccz1rsxY.o
ld: symbol(s) not found for architecture x86_64
collect2: ld gab 1 als Ende-Status zurück

我在使用Ifort的Suse Linux上尝试相同的操作后得到:

/tmp/ifort2oZUKh.o: In function `MAIN__':
test_prog.f90:(.text+0x4d): undefined reference to `test_mod_mp_prod_'

有人可以在我的黑暗中发光吗?谢谢!
PS .:将两个文件同时写入当然是可行的.在网上搜索时,我发现一些状态(我很坦率地说只是不理解)说这可能与静态链接与动态链接有关.

解决方法:

您还需要包括.o文件.也就是说,您应该将其编译为

gfortran -I/path/to/mods -o test_prog test_prog.f90 mods/test_mod.o

这为我工作了.

上一篇:Python环境中HDF5报错:HDF5 library version mismatched error


下一篇:在C中读取fortran二进制文件