質問内容
以下のエラーなのですが公式リポジトリからダウンロードしてきたneovimなのですが以下のコマンドを実行すると以下のエラーが出ますこれはどう対処すればいいのでしょうか?
mdkir build cd build cmake .. cmake --build .
実現したいこと
正常にビルドしたい
前提
OS: ubuntu
> lsb_release -a 18:52:18 No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal
発生している問題・エラーメッセージ
29%] Building C object src/nvim/CMakeFiles/nvim_bin.dir/viml/parser/expressions.c.o [ 29%] Building C object src/nvim/CMakeFiles/nvim_bin.dir/window.c.o [ 29%] Linking C executable ../../bin/nvim /usr/bin/ld: ../../../.deps/usr/lib/libuv.a(threadpool.c.o): in function `init_once': threadpool.c:(.text+0x350): undefined reference to `__isoc23_strtol' /usr/bin/ld: ../../../.deps/usr/lib/libuv.a(thread.c.o): in function `glibc_version_check': thread.c:(.text+0x32): undefined reference to `__isoc23_strtol' /usr/bin/ld: ../../../.deps/usr/lib/libuv.a(linux.c.o): in function `uv__iou_init': linux.c:(.text+0xd3a): undefined reference to `__isoc23_strtol' /usr/bin/ld: ../../../.deps/usr/lib/libuv.a(linux.c.o): in function `uv_resident_set_memory': linux.c:(.text+0x2c21): undefined reference to `__isoc23_strtol' /usr/bin/ld: CMakeFiles/nvim_bin.dir/charset.c.o: in function `try_getdigits': /home/shigurechan/ダウンロード/neovim/src/nvim/charset.c:1087: undefined reference to `__isoc23_strtoimax' /usr/bin/ld: CMakeFiles/nvim_bin.dir/eval/window.c.o: in function `get_winnr': /home/shigurechan/ダウンロード/neovim/src/nvim/eval/window.c:269: undefined reference to `__isoc23_strtol' /usr/bin/ld: CMakeFiles/nvim_bin.dir/file_search.c.o: in function `vim_findfile_init': /home/shigurechan/ダウンロード/neovim/src/nvim/file_search.c:406: undefined reference to `__isoc23_strtol' /usr/bin/ld: CMakeFiles/nvim_bin.dir/highlight_group.c.o: in function `do_highlight': /home/shigurechan/ダウンロード/neovim/src/nvim/highlight_group.c:1436: undefined reference to `__isoc23_strtol' /usr/bin/ld: CMakeFiles/nvim_bin.dir/highlight_group.c.o: in function `name_to_color': /home/shigurechan/ダウンロード/neovim/src/nvim/highlight_group.c:3117: undefined reference to `__isoc23_strtol' /usr/bin/ld: CMakeFiles/nvim_bin.dir/indent.c.o: in function `tabstop_set': /home/shigurechan/ダウンロード/neovim/src/nvim/indent.c:71: undefined reference to `__isoc23_strtol' /usr/bin/ld: CMakeFiles/nvim_bin.dir/os/input.c.o: in function `handle_mouse_event': /home/shigurechan/ダウンロード/neovim/src/nvim/os/input.c:382: undefined reference to `__isoc23_sscanf' /usr/bin/ld: CMakeFiles/nvim_bin.dir/os/process.c.o: in function `os_proc_children': /home/shigurechan/ダウンロード/neovim/src/nvim/os/process.c:216: undefined reference to `__isoc23_fscanf' /usr/bin/ld: CMakeFiles/nvim_bin.dir/tui/tui.c.o: in function `terminfo_start': /home/shigurechan/ダウンロード/neovim/src/nvim/tui/tui.c:340: undefined reference to `__isoc23_strtol' /usr/bin/ld: /home/shigurechan/ダウンロード/neovim/src/nvim/tui/tui.c:348: undefined reference to `__isoc23_strtol' /usr/bin/ld: CMakeFiles/nvim_bin.dir/tui/tui.c.o: in function `tui_guess_size': /home/shigurechan/ダウンロード/neovim/src/nvim/tui/tui.c:1669: undefined reference to `__isoc23_sscanf' /usr/bin/ld: /home/shigurechan/ダウンロード/neovim/src/nvim/tui/tui.c:1671: undefined reference to `__isoc23_sscanf' /usr/bin/ld: CMakeFiles/nvim_bin.dir/__/termkey/termkey.c.o: in function `termkey_strpkey': /home/shigurechan/ダウンロード/neovim/src/termkey/termkey.c:1493: undefined reference to `__isoc23_sscanf' /usr/bin/ld: /home/shigurechan/ダウンロード/neovim/src/termkey/termkey.c:1497: undefined reference to `__isoc23_sscanf' /usr/bin/ld: /home/shigurechan/ダウンロード/neovim/src/termkey/termkey.c:1528: undefined reference to `__isoc23_sscanf' collect2: error: ld returned 1 exit status make[2]: *** [src/nvim/CMakeFiles/nvim_bin.dir/build.make:4953: bin/nvim] エラー 1 make[1]: *** [CMakeFiles/Makefile2:814: src/nvim/CMakeFiles/nvim_bin.dir/all] エラー 2 make: *** [Makefile:152: all] エラー 2
試したこと
1,CMakeLists.txtのファイルの最後にtarget_link_libraries(nvim_bin PUBLIC -lstdc++ -lm)を追加してcmake .. cmake --buildを実行
2,sudo apt update sudo apt upgradeを実行
3,libuvをコンパイルしてインストールhttps://github.com/libuv/libuv
調べたこと
どうやらlibcというファイルがのバージョンが古いか、うまくリンクされていないことが原因らいしいです。
Ubuntuのバージョンが古いからでしょうか?
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
glibc に __isoc23_* 系の関数が導入されたのは glic-2.38 からの様です。
sourceware.org Git - glibc.git/blob - include/stdlib.h
https://sourceware.org/git/?p=glibc.git;a=blob;f=include/stdlib.h;h=7deb8193d746ff0b87e06ebf8abf9637bf866e26;hb=36f2487f13e3540be9ee0fb51876b1da72176d3f
導入の経緯に関しては以下のドキュメントで説明されています。
sourceware.org Git - glibc.git/commit - include/stdlib.h
https://sourceware.org/git/?p=glibc.git;a=commit;f=include/stdlib.h;h=64924422a99690d147a166b4de3103f3bf3eaf6c
ただ、focal の glibc は version 2.31 なので、link error は起こらないはずです。実際、Ubuntu 22.04(Jammy Jellyfish) glibc 2.35 でビルドしても本件の様な link error は発生しません。
libc 関連のパッケージは何をインストールしてありますか?
こちらのコマンドでインストールしました。
> sudo apt-get install --reinstall libc6
libc6-dev は入ってないのですか?
> sudo apt install libc6-dev
```
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
libc6-dev はすでに最新バージョン (2.31-0ubuntu9.14) です。
libc6-dev は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
```
と表示されます
libc6 (libc6-devではない) のバージョンはいくつですか。