'make'错误:设置编译路径

时间:2013-05-16 15:37:40

标签: compilation path makefile compiler-flags search-path

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

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

我希望在/ home / stephcar / bin中安装自己的版本loacal。

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

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)?也许我可以在这里提示一下!

谢谢Stephan

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

中的那个

1 个答案:

答案 0 :(得分:0)

首先,您通常不希望将bin目录用作prefix。在UNIX中,bin目录包含您运行的二进制文件:mkdirlsgcc等命令。您不希望它包含{{1}等子目录}},bin/bin等。它会起作用,但它不是标准的。你应该使用bin/lib将内容放入--prefix=/home/stephcar/home/stephcar/bin等等。或者更好的是,为这个包创建一个子目录并使用它:/home/stephcar/lib或其他东西。< / p>

其次,我假设您的示例行上的内容是拼写错误:

--prefix=/home/stephcar/netcdf

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

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

第三,通常首选在LIBS='-L/home/stephcar/bin/lib ... 命令行而不是在其环境中设置这些变量;也就是说,在之后配置命令之前将它们放在之后:

configure

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