ld:找不到架构x86_64的符号

时间:2016-07-21 00:28:29

标签: macports

我正在尝试编译程序。它需要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

有没有人知道我能做什么? 谢谢!

2 个答案:

答案 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.dyliblocate netcdf.h 以确保这些文件在您期望的位置。

然后,编译命令为 gfortran -fsecond-underscore -I/opt/local/include test_ncdf.f90 -o test_ncdf -L/opt/local/lib -lnetcdff用于名为test_ncdf的程序。

注意-lnetcdff

中的第二个f