如果我正确理解了手册,则应该在文件夹中创建一个包含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
这为我工作了.