はじめに
NetCDF形式のファイルをQGISで開くために、GeoTiff形式に変換しようとしていた。
NetCDF形式からGeoTiff形式に変換するためのPythonスクリプトを配布、解説しているWebサイトを見つけた。これを実行したいので、まず実行に必要なコマンドを実行できるようにしようと思った。
同Webサイト中の「2-1. PythonでnetCDFの読み込み」にある、netCDF4.Datesetを実行するためには、netCDF4をパソコンにインストールする必要があることが分かったため、以下のHPを参照して、Intel oneAPIを使って、NetCDF4をビルドしようと思った。
Intel oneAPIをインストールしていなかったので、以下のHPを参照して、PCにIntel oneAPIをインストールした。
この過程で、
./config-intel.sh
を実行した際に、以下のエラーが発生。
configure: netCDF-Fortran 4.6.0
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking target system type... x86_64-pc-linux-gnu
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a race-free mkdir -p... /usr/bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking whether to enable maintainer-specific portions of Makefiles... no
configure: checking user options
checking whether make supports the include directive... yes (GNU style)
checking for gcc... icc
checking whether the C compiler works... no
configure: error: in `/home/user/downloads/netcdf-fortran-4.6.0':
configure: error: C compiler cannot create executables
See `config.log' for more details
解決策
エラーを見た感じ、コンパイラ周りで発生している。
config-intel.sh
を確認すると、
export CDFROOT="/usr"
export LD_LIBRARY_PATH="${CDFROOT}/lib:${LD_LIBRARY_PATH}"
export LDFLAGS="-L${CDFROOT}/lib -I${CDFROOT}/include":
export OPTIM="-O3 -mcmodel=large -fPIC ${LDFLAGS}"
#
export CC=icc
export CXX=icpc
export FC=ifort
export F77=ifort
export F90=ifort
export CPP='icc -E -mcmodel=large'
export CXXCPP='icpc -E -mcmodel=large'
export CPPFLAGS="-DNDEBUG -DpgiFortran ${LDFLAGS}"
#
export CFLAGS=" ${OPTIM}"
export CXXFLAGS=" ${OPTIM}"
export FCFLAGS=" ${OPTIM}"
export F77FLAGS=" ${OPTIM}"
export F90FLAGS=" ${OPTIM}"
#
./configure --prefix=/usr/local/netcdf-ifort/4.6.1 --enable-large-file-tests --with-pic
となっており、コンパイラの設定で、icc
, icpc
, ifort
が指定されている。(gccとかではなく)
↑こいつらがないとダメ
あるか確認
which icc
which icpc
which ifort
名前が置き換わっているぽいので↓も実行して確認
which icx
which icpx
which ifx
ターミナルで実行して、パスが表示されればおk
-
icx
,icpx
,ifx
は表示されるが、icc
,icpc
,ifort
は表示されない場合- 解決策1
config-intel.shを編集する - 解決策2
icx
,icpx
,ifx
をそれぞれicc
,icpc
,ifort
として使えるようにする
- 解決策1
-
どれも表示されない場合(
icx
,icpx
,ifx
のパスが表示されない場合)
インストールする必要あり
icx
, icpx
, ifx
は表示されるが、icc
, icpc
, ifort
は表示されない場合
- 解決策2
icx
,icpx
,ifx
をそれぞれicc
,icpc
,ifort
として使えるようにする
これでいいと思う。
まずパスの確認
which icx
which icpx
which ifx
シンボリックリンクを作成する(Windowsの「ショートカット」に似た概念)
ln -s [ターゲットファイルのパス] [リンクを作成する場所]
ifx
をifort
として使用するためのシンボリックリンクの例
sudo ln -s /opt/intel/oneapi/compiler/2025.0/bin/ifx /usr/local/bin/ifort
-
/opt/intel/oneapi/compiler/2025.0/bin/ifx
:ifx
コンパイラの実行ファイルへのパス(パスは例です。whichコマンドで返ってきたパスを入れてください。) -
/usr/local/bin/ifort
:シンボリックリンクを作成する場所。このパスにifort
という名前でリンクが作成されます。
この例を参考に、パスが表示されないやつのシンボリックリンクを作成してみてください。
インストールする場合
C++コンパイラ(icx/icc)のインストール
sudo apt install intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic
Fortranコンパイラ(ifx/ifort)のインストール
sudo apt install intel-oneapi-compiler-fortran
今まで通り進める
Intelコンパイラの環境変数を設定するために、setvars.sh
スクリプトを実行
source /opt/intel/oneapi/setvars.sh
毎回実行したくなければ↓(任意)
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bashrc
source ~/.bashrc
確認
which icc
which icpc
which ifort
which icx
which icpx
which ifx
./config-intel.sh
おわりに
intelコンパイラではなく、おとなしくgcc
使っとけばこのエラーには遭遇しなかっただろう。
icc
がicx
に変わっていたのは知らなかった。