

[eccodes-2.30.0-Source](https://confluence.ecmwf.int/display/ECC/Releases)
のsrcディレクトリには.ccファイルが格納されており、これをビルドしたいと考えた。

手順：  
eccodes-2.30.0-Source\windows\msvc\grib_api.slnを右クリックしてVisual Studio
2022を開く。ソリューション'grib_api'プロジェクトを右クリックしてソリューションのビルドを選択したが、以下の様なエラーが多発します。.cファイルを探していて.ccファイルを認識しないようです。

[code]

    エラー C1083   ソース ファイルを開けません。'..\..\..\src\action.c':No such file or directory    grib_api_lib    C:\Users\go_ta\Downloads\eccodes-2.30.0-Source\windows\msvc\grib_api_lib\c1 1   
    
[/code]

2.27.1の場合はsrcファイルの中身が.cファイルなので同じ手順で無事にビルドできます。`conda install pygrib`
でpygribをインストールしたのちdefinitionsディレクトリをanacondaにセットして、当面問題なくpygribを利用できています。pipを利用しない場合はビルドにこだわる必要が無いので気にしなくても良いかもしれませんが、何となくスッキリしません。

VisualStudioにもC++環境にも詳しくないのでどうすればよいのか全く見当がつきません。.ccファイルを.cにコピーして実行すると当然ながら記述方法の違いからエラーとなります。これを解決する方法がありましたら、ご教示ください。


CC BY-SA 4.0
2023-06-27T00:00:16.487
95385
2023-06-29T01:43:36.320
2023-06-28T02:19:59.347
3060
47665
question
python3 c++ visual-studio
VisualStudio2022でeccodes-2.30.0-Sourceをビルド出来ない


どのような手順を実施したのか質問文に書かれていないのでわかりませんが、その手順が間違っていたと推測されます。
[`.appveyor.yml`](https://github.com/ecmwf/eccodes/blob/master/.appveyor.yml)を参考にするといいでしょう。概ね次のようになっていて、

[code]

    build_script:
      - cmd: cd %ECCODES_SRC%
      - cmd: mkdir build && cd build
      - cmd: cmake -G "NMake Makefiles" ^
                   -D CMAKE_INSTALL_PREFIX=%INSTALL_DIR% ^
                   -D CMAKE_BUILD_TYPE=Release ^
                   -D ENABLE_FORTRAN=0 ^
                   -D ENABLE_NETCDF=1 ^
                   -D ENABLE_JPG=1 ^
                   -D ENABLE_AEC=0 ^
                   -D IEEE_LE=1 ^
                   -D ENABLE_MEMFS=1 ^
                   -D ENABLE_EXTRA_TESTS=ON ^
                   -D WINDOWS_TESTING_BASHRC=%WINDOWS_TESTING_BASHRC% ^
                   ..
      - cmd: nmake
      - cmd: ctest --output-on-failure
      - cmd: nmake install
    
[/code]

辺りの`- cmd: `を取り除いた部分を実行してください。


CC BY-SA 4.0
2023-06-27T02:38:10.780
95389
2023-06-27T02:38:10.780
4236
95385
answer


kunif さんがコメント欄で言及している通り、公式サイトのマニュアルには "Windows には対応していない" とあるので、Linux
環境を用意した方が近道だと思います。

参考までに、"eccodes visual studio" で検索してみると非公式な Windows
向けのリポジトリが見つかったので、こちらも参照してみるとよいかもしれません。  
(ただしバージョンは v2.13.1 と古いものになっています)

<https://github.com/moonpyk/eccodes-build-windows>


CC BY-SA 4.0
2023-06-27T07:16:33.210
95391
2023-06-27T07:16:33.210
3060
95385
answer


自己回答です。

### 現象

  * ダウンロードしてLhaplusで解凍
  * eccodes-2.30.0-Sourceのsrcディレクトリにあるeccodes_versions.h.in をeccodes_versions.hとしてコピーし＠の部分をバージョンに合わせて変更（Kunifsiの指摘により追記）
  * eccodes-2.30.0-Sourceのwindows\msvc\grib_api.slnを右クリックしアプリ選択でVisual Studio 2022を選択。
  * プロジェクトの再ターゲット画面でOKを選択
  * ソリューションタブで'grib_api'を右クリックしてソリューションのビルドを選択すると、以下のエラーが多発する  

  * エラー C1083 ソース ファイルを開けません。'......\src\action.c':No such file or directory grib_api_lib C:\Users\go_ta\Downloads\eccodes-2.30.0-Source\windows\msvc\grib_api_lib\c1 1  

  * srcディレクトリにあるソースは.cc拡張子なのにエラーメッセージでは.c拡張子を探しに行っている。

### 解決手順

  * .vcxprojに記述されたソースファイルの拡張子を変更してみればと言う回答（Kunif氏）を参考に、すべての.vcxproj内の.c拡張子を全て.cc拡張子に変更。
  * 再度grib_api.slnを右クリックしアプリ選択でVisual Studio 2022を選択。
  * ソリューションタブを右クリックしてソリューションのビルドを選択すると上記のファイルエラーは解消する。
  * 新たな問題として'grib_accessor_class_data_run_length_packing'が未解決シンボルと表示される。
  * srcディレクトリには未解決シンボルのソースファイルが存在するので、記入漏れと判断してgrib_api_lib.vcxproj内に追加する。
  * 再度grib_api.slnを右クリックしアプリ選択でVisual Studio 2022を選択。
  * ソリューションタブを右クリックしてソリューションのビルドを選択するエラーは解消してビルドが正常終了する。

### 感想

  * ビルドを実行するときに対象を指定する仕組みを理解していなかったことが原因。
  * 指摘された.xprojファイルに対象ソースファイルが指定されているので拡張子変更が必要。
  * 未解決シンボルは指定が足りないことが原因と想定されるので対象を確認して、適切な場所に追加すれば問題なく稼働することを理解した。


CC BY-SA 4.0
2023-06-28T01:29:07.243
95400
2023-06-29T01:43:36.320
2023-06-29T01:43:36.320
47665
47665
95385
answer