Closed mrt-tsk closed 1 month ago
色がついてればわかりやすいのですが…リンクのログから地道にerrorという文字を探せばいいでしょうか?
例えばWindows TerminalなどからWSLを使っている場合には、Ctrl+Shift+Fで検索ができます。
目が死にそうと思ってました笑 ありがとうございます。やってみます。
後、さっき言い忘れてて申し訳ないんですが、symbols:
から始まる行はおそらくエラーとは関係ないと思います。
そうだったんですね笑 具体的にどういうのがエラーとかってありますか?
こういうのはそうですか? ld.lld: Loaded libc++.a(stdexcept.cpp.obj) for std::runtime_error::runtime_error(char const*)
そういうのは違いますね。 もしかするとログにはエラー含まれてないかもです。<( )>
ちなみに
/opt/AMD/aocc-compiler-4.2.0/bin/ld.lld --verbose -m i386pep -Bstatic -o YaneuraOu-by-gcc.exe /usr/x86_64-w64-mingw32/lib/crt2.o /usr/x86_64-w64-mingw32/lib/crtbegin.o -L/usr/lib -L/mnt/c/msys64/mingw64/lib -L/opt/AMD/aocc-compiler-4.2.0/lib/ -L/usr/x86_64-w64-mingw32/lib -L/usr/x86_64-w64-mingw32/mingw/lib -L/opt/AMD/aocc-compiler-4.2.0/lib/clang/16/lib/windows ../obj/main.o ../obj/types.o ../obj/bitboard.o ../obj/misc.o ../obj/movegen.o ../obj/position.o ../obj/usi.o ../obj/usi_option.o ../obj/thread.o ../obj/tt.o ../obj/movepick.o ../obj/timeman.o ../obj/book/book.o ../obj/book/apery_book.o ../obj/extra/bitop.o ../obj/extra/long_effect.o ../obj/extra/sfen_packer.o ../obj/extra/super_sort.o ../obj/mate/mate.o ../obj/mate/mate1ply_without_effect.o ../obj/mate/mate1ply_with_effect.o ../obj/mate/mate_solver.o ../obj/eval/evaluate_bona_piece.o ../obj/eval/evaluate.o ../obj/eval/evaluate_io.o ../obj/eval/evaluate_mir_inv_tools.o ../obj/eval/material/evaluate_material.o ../obj/testcmd/unit_test.o ../obj/testcmd/mate_test_cmd.o ../obj/testcmd/normal_test_cmd.o ../obj/testcmd/benchmark.o ../obj/book/makebook.o ../obj/book/makebook2015.o ../obj/book/makebook2023.o ../obj/learn/learner.o ../obj/learn/learning_tools.o ../obj/learn/multi_think.o ../obj/eval/nnue/evaluate_nnue.o ../obj/eval/nnue/evaluate_nnue_learner.o ../obj/eval/nnue/nnue_test_command.o ../obj/eval/nnue/features/k.o ../obj/eval/nnue/features/p.o ../obj/eval/nnue/features/half_kp.o ../obj/eval/nnue/features/half_kp_vm.o ../obj/eval/nnue/features/half_relative_kp.o ../obj/eval/nnue/features/half_kpe9.o ../obj/eval/nnue/features/pe9.o ../obj/engine/yaneuraou-engine/yaneuraou-search.o -s -lpthread -lc++ -lc++abi --start-group -lmingw32 /opt/AMD/aocc-compiler-4.2.0/lib/clang/16/lib/windows/libclang_rt.builtins-x86_64.a -l:libunwind.a -lmoldname -lmingwex -lmsvcrt -lpthread -ladvapi32 -lshell32 -luser32 -lkernel32 --end-group /usr/x86_64-w64-mingw32/lib/crtend.o
これだと、
ld.lld: error: undefined symbol: std::__1::basic_streambuf<char, std::__1::char_traits<char>>::seekpos(std::__1::fpos<int>, unsigned int)
>>> referenced by misc.cpp
>>> ../obj/misc.o
>>> referenced by eval/nnue/evaluate_nnue.cpp
>>> ../obj/eval/nnue/evaluate_nnue.o
ld.lld: error: undefined symbol: std::__1::codecvt<char, char, int>::id
>>> referenced by misc.cpp
>>> ../obj/misc.o
>>> referenced by book/book.cpp
>>> ../obj/book/book.o
>>> referenced by book/apery_book.cpp
>>> ../obj/book/apery_book.o
>>> referenced 3 more times
ここら辺のエラーが出なくなったりしませんか。
出ますね。
いや~壊れてるとなると、ubuntuを再インストールしないとダメそうですね
色々インストールしてるので、それはあるかもしれません。
msysの方でもう1度libc++入れなおしてもらえませんか。
pacman -S mingw-w64-clang-x86_64-libc++ mingw-w64-x86_64-libc++
これによって改善されるとも思えないですけど...
いや~同じエラーです。
問題があるとしたら、WSL側なのか、msys側なのかどっちだと思いますか?
参照しているlibc++に問題がありそうなんで、msysの方なんですかね...
とはいえnm -a /mingw64/lib/libmingw32.a | grep mingw_app_type
した時の出力とかは正常ですし...
謎です。
現状libc++の問題とmingw系のものが見つからない問題の2つあってどっちもよくわからないという感じですね。
そうか~謎ですね。 一度WSL側を再インストールしてもう一度やってみようと思いますが、できると思いますか?
issue立てる前に色々インストールしたりビルドしたりしてたので、内部でなにかしらの競合が起きてる可能性はあると思います。
Ubuntuを再インストールする前に、aptをリセットしてみるのがよいかとは思います。あとmsysのpacmanの方もリセットしてからそれぞれのパッケージを入れなおしてみてはいかがでしょうか。
なるほど!消さずにリセットできるならそのほうがいいですね。やってみます! 長時間とても丁寧に対応していただき感謝しかありません。ありがとうございます。 のちほど、また連絡しますm(-_-)m
ビルドがうまくいくことを願っています! また何かあればご連絡ください。
ありがとうございます! その時はよろしくお願いします。
困りました。結局どちらも再インストールしてやってみましたが、エラーが出ます。
make clean tournament COMPILER=/opt/AMD/aocc-compiler-4.2.0/bin/clang++ EXTRA_CPPFLAGS="-stdlib=libc++ -target x86_64-w64-mingw32 -I/usr/include/mingw-w64 -static -pthread" EXTRA_LDFLAGS="-rtlib=compiler-rt -unwindlib=libunwind -L/usr/lib -L/mnt/c/msys64/mingw64/lib -L/opt/AMD/aocc-compiler-4.2.0/lib/" -j 8 実行時です。 下のほうは、同じエラーですね。
ld.lld: error: undefined symbol: __stdio_common_vsscanf
referenced by libc++.a(locale.cpp.obj):(_sscanf_l)
ld.lld: error: undefined symbol: __declspec(dllimport) _strftime_l
referenced by libc++.a(locale.cpp.obj):(std::1::time_put<char, std::__1::ostreambuf_iterator<char, std::1::char_traits
>>::do_put(std::1::ostreambuf_iterator<char, std::__1::char_traits >, std:: 1::ios_base&, char, tm const, char, char) const) referenced by libc++.a(locale.cpp.obj):(std::1::time_put::__do_put(char, char&, tm const, char, char) const) referenced by libc++.a(locale.cpp.obj):(std::1::time_put::__do_put(wchar_t, wchar_t&, tm const*, char, char) const) referenced 6 more times
ld.lld: error: undefined symbol: std::1::basic_streambuf<char, std::__1::char_traits
referenced by misc.cpp ../obj/misc.o referenced by eval/nnue/evaluate_nnue.cpp ../obj/eval/nnue/evaluate_nnue.o
ld.lld: error: undefined symbol: std::__1::codecvt<char, char, int>::id
referenced by misc.cpp ../obj/misc.o referenced by book/book.cpp ../obj/book/book.o referenced by book/apery_book.cpp ../obj/book/apery_book.o referenced 3 more times clang-16: error: linker command failed with exit code 1 (use -v to see invocation) make[1]: [Makefile:656: YaneuraOu-by-gcc] Error 1 make[1]: Leaving directory '/home/mrttsk/YaneuraOu/source' make: [Makefile:690: tournament] Error 2
意味があるかはわかりませんが… make clean tournament COMPILER=/opt/AMD/aocc-compiler-4.2.0/bin/clang++ EXTRA_CPPFLAGS="-stdlib=libc++ -target x86_64-w64-mingw32 -pthread" EXTRA_LDFLAGS="-rtlib=compiler-rt -unwindlib=libunwind -L/mnt/c/msys64/mingw64/lib" -j8 でビルドすると、(-staticを消してみました。)上2つのエラーは減りました。
ld.lld: error: undefined symbol: std::1::basic_streambuf<char, std::__1::char_traits
referenced by misc.cpp ../obj/misc.o referenced by eval/nnue/evaluate_nnue.cpp ../obj/eval/nnue/evaluate_nnue.o
ld.lld: error: undefined symbol: std::__1::codecvt<char, char, int>::id
referenced by misc.cpp ../obj/misc.o referenced by book/book.cpp ../obj/book/book.o referenced by book/apery_book.cpp ../obj/book/apery_book.o referenced 3 more times clang-16: error: linker command failed with exit code 1 (use -v to see invocation)
対応が遅くなってしまい申し訳ありません。
意味があるかはわかりませんが… make clean tournament COMPILER=/opt/AMD/aocc-compiler-4.2.0/bin/clang++ EXTRA_CPPFLAGS="-stdlib=libc++ -target x86_64-w64-mingw32 -pthread" EXTRA_LDFLAGS="-rtlib=compiler-rt -unwindlib=libunwind -L/mnt/c/msys64/mingw64/lib" -j8 でビルドすると、(-staticを消してみました。)上2つのエラーは減りました。
これに関してリンク時にシンボルを解決することを実行時に遅らせてることになるので、根本的な解決ではないうえに速度は落ちると思われます(大差はないかもしれませんが)。
libc++が適切にリンクできていないようなので、以下のように直接ファイルを指定してみたらどうなるか試していただけないでしょうか。
make clean tournament COMPILER=/opt/AMD/aocc-compiler-4.2.0/bin/clang++ EXTRA_CPPFLAGS="-stdlib=libc++ -target x86_64-w64-mingw32 -I/usr/include/mingw-w64 -static -pthread" EXTRA_LDFLAGS="-rtlib=compiler-rt -unwindlib=libunwind -L/usr/lib -L/mnt/c/msys64/mingw64/lib -L/opt/AMD/aocc-compiler-4.2.0/lib/ /mnt/c/msys64/mingw64/lib/libc++.a /mnt/c/msys64/mingw64/lib/libc++abi.a" -j 8
返信ありがとうございます。 う~ん、なるほど… 早速試してみましたが、同じエラーでした。 一応聞きたいのですが、/usr/include/c++/v1ってファイル形式はフォルダですか? 最初入っていたのは中身がないファイルみたいな感じだったので、これは機能してないなと考えて、それを消して/opt/AMD/aocc-compiler-4.2.0/include/c++/v1のディレクトリをコピーしたので、関係はなさそうといえどうなのかなと あとmsysでlibc++関連のダウンロードしたときになぜかmnt/c/msys/clang64/libのほうに入ってたりしてて、それはmingw64/libにコピーしたので大丈夫だとは思うのですが… インストールの段階で何か問題が生じる可能性はありますか?
一応聞きたいのですが、/usr/include/c++/v1ってファイル形式はフォルダですか?
ディレクトリへのリンクですかね。エクスプローラーから見るとファイルかのように見えるとは思いますが。
__stdio_common_vsscanf
ってたぶんMSVC関連のものだと思うのでmsvcrt
のリンク関係で問題が発生してそうですね。あと、相変わらずlibc++
の方も正しくリンクできてないですね。
そうか~リンクの一部を消してたってことになるんですね。 根本的な原因の可能性が高いか…
でも現状リンクで問題が発生していて、そのリンクしているファイルはmsys側なので、あまり問題ではなさそうな気はします。 ただ、全くないと断言はできないです。
すみません。確認してから消すべきでした。 戻す方法はないですよね… msys側で対処できればいいのですが。
libc++関係のaptのパッケージをすべて消して入れなおすとかしたら戻せるとは思います。
良かった~復活しました。
とはいえ同じエラーが出ますね… となると、やっぱりmsys側のlibc++へのリンクが問題ですか。
v1戻らないかと思い、焦りました。ありがとうございます。
となると、やっぱりmsys側のlibc++へのリンクが問題ですか。
そうですね。さらに言えば、MSVC関係のリンクもうまくいっていないのが気になりますね。そこは一旦-static
なしでビルドして足りないdllファイルをexeファイルと同じディレクトリに配置するとかで対応することも可能ですが。
たしかに、速度が大きく落ちないなら… とりあえず、下2つのエラーを解決できれば動かせそうですか。
以前は下記のコマンドを実行したときに、
/opt/AMD/aocc-compiler-4.2.0/bin/clang++ -E -x c++ -stdlib=libc++ -target x86_64-w64-mingw32 -static - -v < /dev/null
/usr/include/c++/v1
は含まれていないとおっしゃっていましたが、今は存在していますか。
たしかに、速度が大きく落ちないなら… とりあえず、下2つのエラーを解決できれば動かせそうですか。
おそらく下2つのエラーを修正できたらあとは簡単な気がします。
存在してます。libc++関連の再インストールしたら最初の状態に戻せました。 clang -cc1 version 16.0.3 based upon LLVM Mirror.Version.16.0.3 default target x86_64-unknown-linux-gnu ignoring nonexistent directory "/usr/x86_64-w64-mingw32/include/c++/v1" ignoring nonexistent directory "/usr/x86_64-w64-mingw32/usr/include"
/usr/include/c++/v1 /opt/AMD/aocc-compiler-4.2.0/lib/clang/16/include /usr/x86_64-w64-mingw32/include End of search list.
下2つのみがlibc++の原因だと思います。
std::__1::~
みたいなのが含まれてるものがlibc++が絡んだエラーです。
なるほど、そこを見ればいいんですね。 調べるとlibc++関連とは出てきますが、どう見分けるのかがわかりませんでした。
libc++関連のAファイルをmnt/c/msys64/mingw64/lib/からWSL側/usr/x86_64-w64-mingw32/libにコピーして-Lで指定してビルドするのはどうかなと考え、ビルドしてみましたが解決できず...
やっぱりどうもうまく参照してくれない気がします。
リンカのログを見る限り、参照自体はしているみたいですけどね。 ほとんどのシンボルは正常に解決できているんですけど、一部のシンボルのみなぜかリンクできていないという状態ですね。
ld.lld: error: undefined symbol: std::__1::basic_streambuf<char, std::__1::char_traits>::seekpos(std::__1::fpos, unsigned int)
>> referenced by misc.cpp
../obj/misc.o
>> referenced by eval/nnue/evaluate_nnue.cpp
../obj/eval/nnue/evaluate_nnue.o
ld.lld: error: undefined symbol: std::__1::codecvt<char, char, int>::id
>> referenced by misc.cpp
../obj/misc.o
>> referenced by book/book.cpp
../obj/book/book.o
>> referenced by book/apery_book.cpp
../obj/book/apery_book.o
referenced 3 more times
上記のエラーを見る限り、解決できていないシンボルは2つだけみたいですけど、普通libc++が正しくリンクできていないときは大量に未解決のシンボルが出てくるはずです。なぜその2つのみシンボルが解決できないのか不思議です。
特定の箇所だけなのは珍しいんですね… ノートPCの方でも同じ手順でビルドしてみたのですが、やはり同じエラーでした。
何かパッケージが足りてないんですかね。 パッケージをこちらの環境と合わせてもらうため、 aptのパッケージのリスト と pacmanのパッケージのリスト をダウンロードして、 aptの方は、
sudo dpkg --set-selections < package-list.txt
sudo apt-get dselect-upgrade
pacmanの方は、
sudo pacman -Syu --needed - < package-list.txt
でインストールしてみて再ビルドしてみてもらえませんか。
ありがとうございます!pacmanはうまくいったと思いますが sudo dpkg --set-selections < package-list.txtがなぜか-bash: package-list.txt: No such file or directoryで跳ね返されてしまうのですが、どうしたらいいでしょうか。
aptのパッケージのリストをダウンロードしたディレクトリで、sudo dpkg --set-selections < ./package-list.txt
としてみたらどうですか。
普通にダウンロードして、wsl上のディレクトリにコピーして置いても問題はないですよね。 それでコピーしたpackage-list.txtのあるディレクトリで実行したのですが、先ほどのエラーが出ます。 sudo dpkg --set-selections < ./package-list.txtも同様でした…
WSL上でmingw-w64を用いて既存のgccやclangでやねうら王のWindows用バイナリを生成する方法については コンパイラとして/usr/bin/x86_64-w64-mingw32-g++-posixや~/llvm-mingw-20240619-ucrt-ubuntu-20.04-x86_64/bin/x86_64-w64-mingw32-g++を指定してビルドすることで解決できたように思います。 それぞれ動作に必要なdllをYaneuraOu-by-gcc.exeと同じ階層に置くことで無事動作確認できました。 ただ表題の方法については自力では結局わかりませんでした。 WSL上でAOCCコンパイラやIntelコンパイラを用いて、やねうら王のWindows用バイナリを生成する方法を教えていただけないでしょうか。