Language
Memo
Home > Memo > NETCDF安裝筆記

Home

Projects

Memo

Links

Contact







NETCDF安裝筆記:

  以下筆記是於Red Hat Enterprise Linux 4底下的NETCDF 4.1.3安裝紀錄,當初升級NETCDF的原因我想不大起來了,可能是想要升級NCAR Graphics吧,安裝過程中也一併安裝了其他軟體,如szip、HDF等等。安裝大致是依照官方網站上的步驟進行的。

首先安裝szip:

  1. 下載szip V2.1並解壓縮,這個檔案我是從HDF Group抓的,不是szip官方網站,不過老實說我也不清楚szip的官方網站是哪一個。
  2. 解壓縮後給以下指令
    [root@HPC ~] CFLAGS=-fPIC ./configure --prefix=/opt/app/szip --disable-shared
    -fPIC是要讓它產生Position-Independent Code,一定要加,不然裝NETCDF時會出問題
    --prefix指定要安裝的位置,如果不加通常會安裝到/local/usr下
    --disable-shared讓他成為靜態函式庫
  3. 最後依序執行以下指令來安裝即可,記得檢查安裝過程有沒有出錯。
    [root@HPC ~] make >& make.output-szip21
    [root@HPC ~] make check
    [root@HPC ~] make install

接著是HDF4 - 4.2.6:

  1. 下載HDF4並解壓縮,如果你只要用NCAR Graphics但不需要使用HDF格式檔案的話就不用裝,而如果要用NCL的話就要。
  2. 解壓縮後執行

    [root@HPC ~] ./configure --prefix=/opt/app/hdf4 --with-zlib=/usr/lib64 --with-jpeg=/usr/lib64 \
           --with-szlib=/opt/app/szip --disable-netcdf --includedir=/opt/app/hdf4/include/hdf

    --with-zlib、--with-jpeg、--with-szlib分別是指定你的zlib、jpeg、szip lib位置
    --disable-netcdf是要求不使用HDF內建的NETCDF函式庫(因為稍後會安裝NETCDF啊!)
    --includedir是指定HDF的include file的位置,如果你沒有指定prefix的話那這個一定要加,不然這些檔案可能會被放到/usr/local/include下,這樣會跟NETCDF的include file重疊

    註:若先前安裝szip時沒有指定--disable-shared,在這可能會遇上找不到libsz.so.2這個共享函式庫的問題,這是因為雖然安裝了szip,但是沒有更新動態函式庫的搜尋路徑,使得ld指令在呼叫函式庫找不到它,只要在/etc/ld.so.conf中加入/opt/app/szip/lib來指定你的szip函式庫位置,並執行/sbin/ldconfig -v更新即可。
  3. 最後依序執行以下指令:
    [root@HPC ~] make >& make.output-HDF426
    [root@HPC ~] make check >& make.check-HDF426
    [root@HPC ~] make install
  4. 安裝完畢後即可做環境設定,請將以下幾行加入你的.bashrc或是/etc/profile之類的環境設定檔中:
    export HDFROOT=/opt/app/hdf4
    export HDFINC=$HDFROOT/include
    export HDFLIB=$HDFROOT/lib
    export PATH=$HDFROOT/bin:$PATH

參考資料:HDF Group官方安裝說明
     NCAR NCL安裝說明-HDF 4

NETCDF - 4.1.3


安裝NETCDF前有幾點要注意:

註1:Building and Installing NetCDF on Unix Systems - Platform Specific Note

註2:"The WRF modeling system currently only uses its classic data model, supported in netCDF-4."
   WRF User Guide Chapter 2: Software Installation
   Building NetCDF with Classic Library Only

註3:[netCDF #KMW-354832]: "make check" error report for NETCDF-4.1.3

  1. 下載NETCDF並解壓縮
  2. 設定你的編譯器,編譯指令
    [root@HPC ~]# export CPPFLAGS=-DpgiFortran
    # 如果是csh的使用者,請用setenv
  3. 執行以下指令(由於版本不同,所加的編譯指令也會不同,詳細用法請見官方網站之說明)
    [root@HPC ~] ./configure --prefix=/opt/app/NETCDF --with-zlib=/usr/lib64 \
          --with-szlib=/opt/app/szip/lib --with-temp-large=/scra3/ --enable-hdf4-file-tests \
          --disable-netcdf-4 --with-udunits --enable-large-file-tests --enable-dap
    --with-zilb與--withszlib分別是用來指定zlib以及szip函式庫的位置。
    因為加了–enable-large-file-tests啟動對超過2GB的大檔案的測試,所以要用--with-temp-large指定存放位置,大概會需要13GB的空間,在make check時也會多花一點時間。
    --with-udunits一併編譯udunits這個拿來作單位轉換的套件
    --disable-netcdf-4,重要,若為安裝給WRF用的這一定要加
    --enable-dap啟用對DAP檔案的支援
  4. 設定結束後,即可開始安裝
    [root@HPC ~] make >& make.output-NETCDF413
    [root@HPC ~] make check >& check.output-NETCDF413
    [root@HPC ~] make install
    [root@HPC ~] nc-config --version
    netCDF 4.1.3
    make check最好是跑一下,確定它沒有問題。
    如果在make時出現跟szip有關的問題,那可能是當初安裝szip時沒有加上-fPIC,重新安裝szip即可。

    而若出現:
    PGF90-S-0038-Symbol, nf90_set_var_chunk_cache, has not been explicitly declared (f90tst_vars2.f90)
    0 inform, 2 warnings, 2 severes, 0 fatal for f90tst_vars2
    make[2]: *** [f90tst_vars2.o] Error 2
    這樣的話得單獨安裝fortran的函式庫,請回到configure,加上--disable-fortran讓NETCDF略過它,這樣一來lib資料夾中將不會出現libnetcdff.*的檔案,完成安裝後再另外安裝fortran的函式庫

    如果在安裝RIP4(或其他程式)的時候遇上大量以nf_開頭的函數出現"undefined reference"的錯誤訊息,例如:
    [root@RIP4 ~]# ./compile
    refmos2calc.o(.text+0xbd): In function `refmos2calc_':: undefined reference to `nf_open_'
    refmos2calc.o(.text+0xe0): In function `refmos2calc_':: undefined reference to `nf_inq_dimid_'
    那是因為較新的NETCDF已經將C/Fortran的函式庫(libnetcdf.a / libnetcdff.a,後者多個f)分開了,在網路上搜尋你可能會找到用CPPFLAGS=-DpgiFortran就能解決的說法,可惜在這裡是行不通的,因為那些nf_open_函數都是寫在libnetcdff.a裡面,解決辦法就是在Makefile裡面 搜尋library的地方多指定一個-lnetcdff。

參考資料:Compile error when make check
     NCAR NCL安裝說明-NETCDF
     [netCDF #VEM-652223]: nf_open
     PGI User Forum - NETCDF Undefined Reference



<-Memo


inserted by FC2 system