0

编译 netCDF 库(并行版)时遇到问题。

特别是问题与我猜的不同路径有关。问题是我不是机器管理员。但是,管理员自己已经在自己的目录(此处:/root/treiber)中安装了旧版本。

Tus 我想在 /home/stephcar/bin 中安装自己的本地版本。

因此,我规定了具有不同编译器标志的目录:

CPPFLAGS=-I/home/stephcar/bin/include LDFLAGS=-L/home/stephcar/bin/lib LIBS='-L/home stephcar/bin/lib  -lnetcdf -L/home/stephcar/bin/lib -lhdf5_hl -lhdf5 -lz -lm -L/home/stephcar/bin/lib -lsz' CC=/home/stephcar/bin/bin/mpicc FC=/home/stephcar/bin/bin/mpif90  ./configure --enable-pnetcdf --prefix=/home/stephcar/bin/

另外:我还将我的 --prefix-path (/home/stephcar/bin/) 也放在 $PATH 和 $LD_LIBRARY_PATH 的第一个位置。

但是,由于某种原因,我无法弄清楚,搜索的是根目录(/root/treiber),而不是我的目录……这是来自“make”的错误:

/bin/sh ../libtool  --tag=CC   --mode=link /home/stephcar/bin/bin/mpicc  -g -O2  -L/home/stephcar/bin/lib -o liboc.la  
liboc_la-oc.lo liboc_la-daplex.lo liboc_la-dapparse.lo liboc_la-daptab.lo liboc_la- occlientparams.lo liboc_la-occompile.lo 
liboc_la-occurlfunctions.lo liboc_la-ocdata.lo liboc_la-ocdebug.lo liboc_la-ocdump.lo liboc_la-ocinternal.lo liboc_la-ocnode.lo
liboc_la-ochttp.lo liboc_la-ocrc.lo liboc_la-ocread.lo liboc_la-ocutil.lo liboc_la-ocbytes.lo liboc_la-oclist.lo liboc_la-ocuri.lo
liboc_la-oclog.lo liboc_la-xxdr.lo   -lpnetcdf -lm -L/home/stephcar/bin/lib  -lnetcdf  -L/home/stephcar/bin/lib -lhdf5_hl -lhdf5 
-lz -lm -L/home/stephcar/bin/lib -lsz

/usr/bin/grep: /root/treiber/hdf5-1.8.8/hdf5/lib/libhdf5_hl.la: Permission denied
/usr/bin/sed: can't read /root/treiber/hdf5-1.8.8/hdf5/lib/libhdf5_hl.la: Permission denied
libtool: link: `/root/treiber/hdf5-1.8.8/hdf5/lib/libhdf5_hl.la' is not a valid libtool archive
make[2]: *** [liboc.la] Fehler 1

你有想法吗?我是否设置错误的标志?或者是否有另一个我没有看过的默认路径。如何在模式后的默认路径中搜索(此处:/root/treiber)?也许我可以在这里得到一个提示!

谢谢斯蒂芬

编辑只是为了澄清一下:netCDF 需要另一个库 hdf5,我已成功编译并安装到 ~/bin/lib 中。因此,丢失的 libhdf5_hl.la 也存储在那里。实际问题是我的配置环境没有找到这个目录。相反,它会尝试使用 /root/ 中的那个。

4

1 回答 1

0

首先,您通常不想将bin目录用作prefix. 在 UNIX 中,该bin目录包含您运行的二进制文件:诸如mkdir,等命令。您不希望它包含诸如 , 等子目录ls。它可以工作,但不是标准的。你应该使用which 将东西放入,等。或者更好的是,为这个包创建一个子目录并使用 that:或其他东西。gccbin/binbin/lib--prefix=/home/stephcar/home/stephcar/bin/home/stephcar/lib--prefix=/home/stephcar/netcdf

其次,我假设您的示例行中的这是一个错字:

LIBS='-L/home stephcar/bin/lib ...

(注意空格),你真的用过:

LIBS='-L/home/stephcar/bin/lib ...

第三,通常首选在configure命令行而不是在其环境中设置这些变量;也就是说,将它们放在配置命令之后而不是之前

./configure --enable-pnetcdf --prefix=/home/stephcar/bin CPPFLAGS=-I/home/stephcar/bin/include LDFLAGS=-L...

除此之外,此错误意味着您的构建正在 /root/treiber 子目录中找到 libhdf5_hl 库,该库不可读。我怀疑这个系统上的管理员做错了什么,并试图在一个地方构建这个库,然后以一种无效的方式将它复制到另一个地方。您还需要重建这个 HDF5 包,看起来像。

于 2013-05-16T16:03:39.050 回答