我正在尝试编译程序。它需要netcdf(我用macports下载)并且它在fortran中。我尝试使用-m32以防它是64位与32位版本的问题,但它没有改变任何东西。这是完整的错误消息:
call_mcd.F:6095:40:
call pbl_parameters(1,dimlevs,ps,pplev,z_0,
1
Warning: Rank mismatch in argument ‘ps’ at (1) (rank-1 and scalar)
Undefined symbols for architecture x86_64:
"_nf_close_", referenced from:
_loadeof_ in ccfshvBk.o
_opend_ in ccfshvBk.o
_mola_ in ccN2zoJZ.o
"_nf_get_var_int2_", referenced from:
_mola_ in ccN2zoJZ.o
"_nf_get_var_real_", referenced from:
_loadvar_ in ccfshvBk.o
_loadeof_ in ccfshvBk.o
_getsd_3d_ in ccfshvBk.o
_getsd_2d_ in ccfshvBk.o
_get_3d_ in ccfshvBk.o
_get_2d_ in ccfshvBk.o
_heights_ in ccN2zoJZ.o
...
"_nf_inq_varid_", referenced from:
_loadvar_ in ccfshvBk.o
_loadeof_ in ccfshvBk.o
_getsd_3d_ in ccfshvBk.o
_getsd_2d_ in ccfshvBk.o
_get_3d_ in ccfshvBk.o
_get_2d_ in ccfshvBk.o
_mola_ in ccN2zoJZ.o
...
"_nf_open_", referenced from:
_loadeof_ in ccfshvBk.o
_opend_ in ccfshvBk.o
_mola_ in ccN2zoJZ.o
_heights_ in ccN2zoJZ.o
"_nf_strerror_", referenced from:
_loadeof_ in ccfshvBk.o
_getsd_3d_ in ccfshvBk.o
_getsd_2d_ in ccfshvBk.o
_get_3d_ in ccfshvBk.o
_get_2d_ in ccfshvBk.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
有没有人知道我能做什么? 谢谢!
答案 0 :(得分:0)
发布,因为我没有足够的评论意见:
有些事情要尝试:
在编译程序时,请确保链接行中有netcdf lib。
macports将库放在/ opt / local / lib中了吗?如果是这样,你的搜索路径上是/ opt / local / lib吗?
您可以使用nm工具验证lib实际上是否包含这些符号(_nf_open_等)。
nm -g name_of_netcdf_lib
macports发行版是否包含ncdump工具?没有错误运行吗?
答案 1 :(得分:0)
如上所述,Macports 不会将库安装到与源安装相同的位置。假设Macports安装目录仍然是标准的,则需要包含/opt/local/include
链接头文件和/opt/local/lib
链接编译的二进制文件。
我建议跑步
locate libnetcdff.dylib
和
locate netcdf.h
以确保这些文件在您期望的位置。
然后,编译命令为
gfortran -fsecond-underscore -I/opt/local/include test_ncdf.f90 -o test_ncdf -L/opt/local/lib -lnetcdff
用于名为test_ncdf
的程序。
注意-lnetcdff