2013-05-16 102 views
0

編譯netCDF庫(並行版本)時出現問題。'make'error:設置編譯路徑

特別是這個問題與我猜測的不同路徑有關。 問題是我不是機器的管理員。但是,管理員himselfe已經在自己的目錄(這裏是:/ root/treiber)中安裝了舊版本。

Tus我想在/ 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路徑(/家/ stephcar /斌/)也是在$第一位置PATH和$ LD_LIBRARY_PATH。

但是,由於某種原因,我便無法弄清楚,根目錄(/根/二極管驅動器)進行搜索,而不是我一個......這是錯誤的「製作」:

/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 NEADS另一個庫HDF5,我已經成功編譯並安裝到〜/斌/ lib目錄下。缺少的libhdf5_hl.la也存儲在那裏。 實際的問題是我的配置環境沒有找到這個目錄。相反,它嘗試使用/ root /中的一個。

+0

指定'--prefix =/home/stephcar/bin'會將二進制文件放在'/ home/stephcar/bin/bin'等目錄中,您可能需要指定'--prefix =/home/stephcar相反。我懷疑這是否與你的其他麻煩有關......或者更可能的是,你還沒有解決這個問題。話雖如此,你似乎已經安裝了其他軟件與該前綴,所以也許這是一個非問題畢竟。 –

+0

不,我猜,--prefix-stuff是好的。我試圖在上面的主線中澄清我的問題。 @ jonathan-leffler – Stephan

回答

0

首先,您通常不想使用bin目錄作爲您的prefix。在UNIX中,bin目錄包含您運行的二進制文件:像mkdir,ls,,等命令。您不希望它包含像bin/bin,bin/lib等子目錄。它可以工作,但它不是標準的。 YOu應該使用--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命令:

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

除此之外,這種錯誤意味着你的構建是找到libhdf5_hl庫在/ root /二極管驅動器的子目錄,這是無法讀取。我懷疑這個系統上的管理員做了錯誤的事情,試圖在一個地方建立這個圖書館,然後以一種無效的方式複製到另一個地方。你需要重建這個HDF5包,它看起來像。

+0

感謝您的回答。你錯了。關於你的第一個評論,我確實有一個包含〜/ bin/bin,〜/ bin/lib,〜/ bin/include,......的直接結構。這是一個問題嗎? – Stephan

+0

你是對的目錄/ root/treiber對我來說是不可讀的。然而,問題是如何定義一個使用我的路徑的make的環境〜/ bin/..而不是/ root/treiber /用於查看libhdf5_hl庫?我完全沒有膠水,爲什麼make一直在看/ root。 – Stephan

+0

我真的忘了提及(對不起!)我爲自己構建hdf5-lib。這個在〜/ bin/lib中可用。 – Stephan