【问题标题】:'Can't find hdf5 library' while installing netCDF4安装 netCDF4 时“找不到 hdf5 库”
【发布时间】:2014-07-21 15:08:29
【问题描述】:

我正在尝试在 MacOSX 上从源代码构建 NetCDF4。当我运行 ./configure 时出现错误:

checking for library containing H5Fflush... no
configure: error: Can't find or link to the hdf5 library. Use --disable-netcdf-4, or     see config.log for errors.

我之前安装了hdf5,环境变量设置为:

LDFLAGS=-L/opt/local/lib
CPPFLAGS=-I/opt/local/include

在 /opt/local/lib 我有这些文件:

libhdf5.8.dylib             
libhdf5.a               
libhdf5.dylib               
libhdf5.settings            
libhdf5_cpp.8.dylib         
libhdf5_cpp.a               
libhdf5_cpp.dylib           
libhdf5_hl.8.dylib          
libhdf5_hl.a                
libhdf5_hl.dylib            
libhdf5_hl_cpp.8.dylib          
libhdf5_hl_cpp.a            
libhdf5_hl_cpp.dylib

在 /opt/local/include 我有:

hdf5.h      hdf5_hl.h

为什么配置脚本找不到 hdf5 库?如果需要,我很乐意提供更多信息!

编辑: 我的最终目标是安装 netcdf4 用作 Fortran 模块。我试过通过 MacPorts 安装所有东西,它似乎可以工作,但是当我尝试使用它时,编译器告诉我没有 netcdf.mod 文件,果然在任何地方都找不到。 原来只要输入:

sudo port install netcdf-fortran

只安装库文件,但不创建 .mod 文件,我猜这是需要的。所以我发现其他人也有同样的问题,给出的建议是用 gcc44 安装它,它确实创建了一个 .mod 文件,但后来我的编译器告诉我 .mod 文件是用不同版本的 gfortran 构建的而且它无法使用,所以我尝试从头开始构建它,但如果有人有更快的选择,我会非常乐意尝试!

【问题讨论】:

    标签: shared-libraries hdf5 netcdf


    【解决方案1】:

    通常,当存在无法满足的下游依赖项时,我会看到这种情况。 configure 创建的测试程序正在查找 libhdf5,但编译仍然失败,因为它找不到类似 libzlibszip 的内容,具体取决于您的 libhdf5 的编译方式。

    如果您检查您的config.log 文件并查找错误,它可能会告诉您一些类似于“未解析符号”的内容。这将提供有关缺少哪个库的线索。如果它链接到静态构建的 libhdf5,您可能需要使用LDFLAGS 添加相应的库。

    如果您发布您的 config.log 文件的相关部分,我们或许可以帮助您找出问题所在。

    【讨论】:

    • Here 是我用于 hdf5 安装的 config.log。 This one 用于 netcdf 安装,失败。
    • 在我上面的原始问题中添加了一点,也许帮助我更容易......
    【解决方案2】:

    好吧,我终于想通了。 我用macports重新安装了netcdf-fortran,然后.mod文件突然出现了,然后我遇到了问题,但是当运行gfortran时,它会告诉我netcdf.mod是用与我不同版本的fortran编译的使用。 (Macports 使用 4.8),所以从 macports 获得了 gcc48,现在正在使用 gfortran-mp-4.8 进行编译,它可以工作。

    仍然不知道如何从头开始构建所有这些东西,但至少现在可以使用!!!

    【讨论】:

      【解决方案3】:

      有时它在配置参数中不起作用,例如

       ./configure --enable-shared --enable-fortran --enable-netcdf-4 
       CPPFLAGS=-I$home/apps2/include LDFALGS=-L$home/apps2/lib --prefix=$home/apps2
      

      或者在打开的 SHELL 中导出 CPPFLAGS=-I$home/apps2/include 时不起作用。 也许您可以在 .bashrc 文件中设置环境变量CPPFLAGSLDFLAGS(在前两种方式之前)。

      【讨论】:

        猜你喜欢
        • 2016-07-09
        • 2021-06-01
        • 2015-05-09
        • 1970-01-01
        • 2016-07-15
        • 2016-07-22
        • 2019-01-21
        • 2015-04-28
        • 2016-01-24
        相关资源
        最近更新 更多