node.jsの実行エラー解消「version `GLIBC_2.27′ not found」

by

カテゴリー:

node.jsをコマンドラインで実行した際に、次のような version `GLIBC_2.27' not found というエラーが発生することがあります。この記事では、その原因と解決手順を整理して解説します。

$ nodebrew use v20.2.0
use v20.2.0
$ node -v
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)

バージョンの確認すら実行できない状態です。

エラーの原因: GLIBC_2.27 not found とは

GLIBC_2.27 not found と言われているのは、node本体が必要とするGLIBC(GNU C Library)のバージョンが、実行環境にインストールされていないことが原因です。GLIBCとは「GNU C Library」のことで、新しいバージョンのnodeほど新しいGLIBCを要求します。古いLinux環境(CentOS 7など)で最新のnodeを動かそうとすると、このエラーに遭遇しやすくなります。

原因を確認する: stringsコマンドでGLIBCのバージョンを調べる

まず、現状のライブラリにどのGLIBCバージョンが含まれているかを、バイナリ内の記述を stringsコマンド で確認します。

$ strings /lib64/libm.so.6 | grep GLIBC_2
GLIBC_2.2.5
GLIBC_2.4
GLIBC_2.15
GLIBC_2.15
__errno_location@@GLIBC_2.2.5
qsort@@GLIBC_2.2.5
fputs@@GLIBC_2.2.5
memset@@GLIBC_2.2.5
feupdateenv@@GLIBC_2.2.5
GLIBC_2.4
memmove@@GLIBC_2.2.5
fwrite@@GLIBC_2.2.5
__cxa_finalize@@GLIBC_2.2.5
stderr@@GLIBC_2.2.5
$ strings /lib64/libm.so.6 | grep GLIBC_2.27
$

GLIBC自体は入っていますが、含まれている最新は GLIBC_2.15 までで、nodeが要求する GLIBC_2.27 は入っていないことが確認できます。ほかの GLIBCXXCXXABI のエラーも、同じくバージョン不足が原因です。

解決方法1: nodeのバージョンを下げる(推奨・最小手間)

最も手軽で確実なのは、実行環境のGLIBCで動作するnodeのバージョンまで下げる方法です。システム環境に手を加える必要がないため、共用サーバーや自分の担当外の環境でも安全に対応できます。

手順は次のとおりです。

  1. nodebrew ls-remote でインストール可能なバージョンを確認する
  2. 古めの安定版(今回はv16系)をインストールする
  3. nodebrew use で切り替え、node -v でエラーが出ないことを確認する
$ nodebrew ls-remote
~~~
v16.0.0   v16.1.0   v16.2.0   v16.3.0   v16.4.0   v16.4.1   v16.4.2   v16.5.0
v16.6.0   v16.6.1   v16.6.2   v16.7.0   v16.8.0   v16.9.0   v16.9.1   v16.10.0
v16.11.0  v16.11.1  v16.12.0  v16.13.0  v16.13.1  v16.13.2  v16.14.0  v16.14.1
v16.14.2  v16.15.0  v16.15.1  v16.16.0  v16.17.0  v16.17.1  v16.18.0  v16.18.1
v16.19.0  v16.19.1  v16.20.0
~~~
$ nodebrew install v16.20.0
Fetching: https://nodejs.org/dist/v16.20.0/node-v16.20.0-linux-x64.tar.gz
################################################################################################################################################# 100.0%
Installed successfully
$ nodebrew use v16.20.0
use v16.20.0
$ node -v
v16.20.0

今回の環境では v16まで下げればエラーは出なくなりました。どこまで下げれば動くかは環境のGLIBCバージョン次第なので、エラーが消えるまで段階的に下げて試すのが確実です。

nodebrewの導入方法についてはこちらで解説しています。

解決方法2: GLIBCを更新する(最新nodeが必要な場合)

どうしても最新のnodeを使いたい場合は、GLIBC自体を更新する方法があります。ソースインストールで更新する手順が参考になります。

ただし、GLIBCの更新はシステム全体に影響する変更で、root権限が必要なうえ、他ライブラリの動作確認やメンテナンスコストも増えます。共用環境や本番サーバーでは慎重に判断し、可能であれば 解決方法1(nodeのバージョンを下げる)で最小限に対応するのがおすすめです。

まとめ

  • version `GLIBC_2.27' not found は、nodeが要求するGLIBCが環境に入っていないことが原因
  • strings /lib64/libm.so.6 | grep GLIBC_2 で現在のGLIBCバージョンを確認できる
  • 手軽なのは nodebrew でnodeのバージョンを下げる方法(今回はv16で解消)
  • 最新nodeが必須ならGLIBC自体の更新が必要だが、影響範囲が大きいため慎重に
ホーム » 記事一覧 » SSH » node.jsの実行エラー解消「version `GLIBC_2.27′ not found」

投稿者

ここまで読んでいただき、ありがとうございます。

このサイトでは、私自身が関わっていることや、興味を持って試していることをそのまま置いています。

内容を見ていて、
「少し話を聞いてみたい」
「協業できる部分がありそう」
と感じる点があれば、下記のお問い合わせフォームからご連絡ください。状況を確認したうえで、必要な範囲でお返事します。

特に、以下のWordPressサイトに関する相談にも対応しているのでご興味ありましたらご相談ください。


Comments

“node.jsの実行エラー解消「version `GLIBC_2.27′ not found」” への1件のフィードバック

  1. […] → node.jsの実行エラー解消「version `GLIBC_2.27′ not found」 […]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です