Compilation ';制作';错误:设置编译路径

Compilation ';制作';错误:设置编译路径,compilation,path,makefile,compiler-flags,search-path,Compilation,Path,Makefile,Compiler Flags,Search Path,我在编译netCDF库(并行版本)时遇到问题 特别是,我想问题与不同的路径有关。 问题是我不是机器的管理员。但是,管理员已经在自己的目录中安装了一个旧版本(此处:/root/treiber) 我想在/home/stepcar/bin中安装一个自己的版本 因此,我规定了具有不同编译器标志的目录: CPPFLAGS=-I/home/stephcar/bin/include LDFLAGS=-L/home/stephcar/bin/lib LIBS='-L/home stephcar/bin/lib

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

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

我想在/home/stepcar/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/stepcar/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/

中的目录,您通常不希望使用
bin
目录作为
前缀。在UNIX中,
bin
目录包含您运行的二进制文件:像
mkdir
ls
gcc
等命令。您不希望它包含像
bin/bin
bin/lib
等子目录。它可以工作,但不是标准的。您应该使用
--prefix=/home/stepcar
,它会将内容放入
/home/stepcar/bin
/home/stepcar/lib
,或者更好的是,为这个包创建一个子目录并使用它:
--prefix=/home/stepcar/netcdf
或者其他什么

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

LIBS='-L/home stephcar/bin/lib ...
(注意空格)您确实使用了:

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

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

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

指定
--prefix=/home/stepcar/bin
会将二进制文件放入目录
/home/stepcar/bin/bin
,等等。您可能希望改为指定
--prefix=/home/stepcar
。我怀疑这是否与你的其他问题有关……或者,更可能的是,你还没有解决这个问题。话虽如此,你似乎有其他软件安装了这个前缀,所以也许这毕竟不是问题。不,前缀的东西是好的,我想。我试图在上面的主线中澄清我的问题@乔纳森·莱弗勒坦克回答。你说得对。关于你的第一条评论,我确实有一个目录结构,包含~/bin/bin、~/bin/lib、~/bin/include、。。。这是个问题吗?你是对的,目录/root/treiber对我来说不可读。但是,问题是如何定义使用路径~/bin/的make环境。。而不是/root/treiber/来管理libhdf5_hl库?我真的没有胶水为什么make在看/root。而且我真的忘了提到(对不起!)我已经为自己构建了hdf5库。这个可以在~/bin/lib中找到。这本身不是问题,但它非常不标准,当你描述它时,人们会觉得你很有趣:-)。众所周知,在
bin
下创建某些目录会导致不明错误。我怀疑正在查找/root目录,因为有人使用
--prefix=/root/treiber
构建了该包,然后将生成的库复制到一个全局位置,如
/usr/lib
/usr/local/lib
。那不酷。Libtool对这样的东西有点挑剔。找不到hdf5库的副本。查看config.log,看看你是否能找出原因。我完全同意你的看法。不幸的是,我不得不和他的机器一起工作;(因此,感谢您建议即使在本地目录结构中也要避免使用“bin”。以后我会将其命名为~/software/bin等。您认为如何。不幸的是,我无法更改stuf root在其目录中所做的操作……尽管如此,我在config.log中没有找到任何建议。