yaneurao / YaneuraOu

YaneuraOu is the World's Strongest Shogi engine(AI player) , WCSC29 1st winner , educational and USI compliant engine.
GNU General Public License v3.0
512 stars 140 forks source link

MSYS2でevallearnのビルドができない #277

Closed KazApps closed 3 months ago

KazApps commented 4 months ago

MSYS2上でevallearnをビルドしようとしたところ、`

ld.lld: error: undefined symbol: GOMP_parallel
>>> referenced by libopenblas.a(blas_server_omp.c.obj):(exec_blas)
>>> referenced by libopenblas.a(blas_server_omp.c.obj):(exec_blas)

というリンクエラーが出ます。 しかしLDFLAGSに-lgompとつけると

ld.lld: error: duplicate symbol: omp_aligned_alloc
>>> defined at libomp.a(kmp_csupport.cpp.obj)
>>> defined at libgomp.a(allocator.o)

ld.lld: error: duplicate symbol: omp_alloc
>>> defined at libomp.a(kmp_csupport.cpp.obj)
>>> defined at libgomp.a(allocator.o)

ld.lld: error: duplicate symbol: omp_free
>>> defined at libomp.a(kmp_csupport.cpp.obj)
>>> defined at libgomp.a(allocator.o)

ld.lld: error: duplicate symbol: omp_aligned_calloc
>>> defined at libomp.a(kmp_csupport.cpp.obj)
>>> defined at libgomp.a(allocator.o)

ld.lld: error: duplicate symbol: omp_calloc
>>> defined at libomp.a(kmp_csupport.cpp.obj)
>>> defined at libgomp.a(allocator.o)

ld.lld: error: duplicate symbol: omp_realloc
>>> defined at libomp.a(kmp_csupport.cpp.obj)
>>> defined at libgomp.a(allocator.o)

とシンボルが重複してしまいます。 clang version 18.1.5 LLD 18.1.5 (compatible with GNU linkers)

追記 (2024/05/24) --allow-multiple-definitionを指定することでビルドすることはできるようです。

yaneurao commented 3 months ago

私のほうで試してみたところ、そのエラーが出ず、正常にビルドできました。 MSYS2を新規にインストールして、たぶん以下のコマンドでビルドできるかと思います。

pacman --needed --noconfirm -Syuu
pacman --needed --noconfirm -Syuu pactoys
pacboy --needed --noconfirm -Syuu clang:i lld:i openblas:i openmp:i toolchain:i base-devel:
make clean YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE ENGINE_BRANCH=dev
make -j8 evallearn COMPILER=g++ YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE ENGINE_BRANCH=dev ENGINE_NAME="YaneuraOu\(dev-learn\)" TARGET_CPU=AVX2
KazApps commented 3 months ago

たしかにg++を使えばビルドはできましたが、clangを使うとエラーが出てしまいます。 コマンドは下記のとおりです。 make clean evallearn TARGET_CPU=ZEN3 YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE COMPILER=clang++ EXTRA_CPPFLAGS="-I/mingw64/include/openblas" -j 32

yaneurao commented 3 months ago

私の環境でもやってみましたが、

  1. make clean evallearn TARGET_CPU=ZEN3 YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE COMPILER=clang++ EXTRA_CPPFLAGS="-I/mingw64/include/openblas" -j 32

  2. make clean evallearn TARGET_CPU=ZEN3 YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE COMPILER=clang++ -j 32

  3. と 2. どちらでも正常にビルドできます。

一度MSYS2をクリーンインストールして、試してみていただけないでしょうか。

KazApps commented 3 months ago

クリーンインストールしてみましたが、同様のエラーが出てしまいます。

yaneurao commented 3 months ago

AWSを用いて新規にインスタンスを借りて以下の手順でビルドできることは確認済みです。 そこに書かれているコマンドをコピペして試してみてください。

https://github.com/yaneurao/YaneuraOu/wiki/%E3%82%84%E3%81%AD%E3%81%86%E3%82%89%E7%8E%8B%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E6%89%8B%E9%A0%86#msys2%E3%81%A7%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89