0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetCDF-FortranをIntelAPIでビルドしようとするとエラーが出る場合の対処法

Posted at

はじめに

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を確認すると、

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として使えるようにする
  • どれも表示されない場合(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 [ターゲットファイルのパス] [リンクを作成する場所]

ifxifortとして使用するためのシンボリックリンクの例

sudo ln -s /opt/intel/oneapi/compiler/2025.0/bin/ifx /usr/local/bin/ifort
  • /opt/intel/oneapi/compiler/2025.0/bin/ifxifxコンパイラの実行ファイルへのパス(パスは例です。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使っとけばこのエラーには遭遇しなかっただろう。
iccicxに変わっていたのは知らなかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?