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

# はじめに
NetCDF形式のファイルをQGISで開くために、GeoTiff形式に変換しようとしていた。

NetCDF形式からGeoTiff形式に変換するためのPythonスクリプトを配布、解説しているWebサイトを見つけた。これを実行したいので、まず実行に必要なコマンドを実行できるようにしようと思った。

https://www.eorc.jaxa.jp/JASMES/tutorial/tutorial_002_j.html

同Webサイト中の「2-1. PythonでnetCDFの読み込み」にある、netCDF4.Datesetを実行するためには、netCDF4をパソコンにインストールする必要があることが分かったため、以下のHPを参照して、Intel oneAPIを使って、NetCDF4をビルドしようと思った。

https://estuarine.jp/2020/05/ubuntu-intel-netcdf/

Intel oneAPIをインストールしていなかったので、以下のHPを参照して、PCにIntel oneAPIをインストールした。

https://estuarine.jp/2023/04/oneapi-ubuntu-22-04/


この過程で、
```
./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`を確認すると、
```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とかではなく）
↑こいつらがないとダメ

あるか確認

```bash
which icc
which icpc
which ifort
```

https://www.hpc.co.jp/tech-blog/2023/12/06/intel-oneapi-2024-released/

名前が置き換わっているぽいので↓も実行して確認

```bash
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`として使えるようにする

これでいいと思う。

まずパスの確認

```bash
which icx
which icpx
which ifx
```

シンボリックリンクを作成する（Windowsの「ショートカット」に似た概念）

```bash
ln -s [ターゲットファイルのパス] [リンクを作成する場所]
```

`ifx`を`ifort`として使用するためのシンボリックリンクの例

```bash
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）のインストール

```bash
sudo apt install intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic
```

### Fortranコンパイラ（ifx/ifort）のインストール

```bash
sudo apt install intel-oneapi-compiler-fortran
```

---

## 今まで通り進める

Intelコンパイラの環境変数を設定するために、`setvars.sh`スクリプトを実行

```bash
source /opt/intel/oneapi/setvars.sh
```

https://estuarine.jp/2023/04/oneapi-ubuntu-22-04/#:~:text=%E3%81%A7%E3%81%99%EF%BC%8E-,Intel%20%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E5%88%A9%E7%94%A8%E8%A8%AD%E5%AE%9A,-Intel%20%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9%E3%82%92

毎回実行したくなければ↓（任意）

```bash
echo "source /opt/intel/oneapi/setvars.sh" >> ~/.bashrc
source ~/.bashrc
```

確認

```bash
which icc
which icpc
which ifort
```

```bash
which icx
which icpx
which ifx
```

```bash
./config-intel.sh
```

# おわりに
intelコンパイラではなく、おとなしく`gcc`使っとけばこのエラーには遭遇しなかっただろう。
`icc`が`icx`に変わっていたのは知らなかった。