StarboundのLinux鯖構築時に発生するライブラリエラーの対処法に関して
StarboundのLinux鯖は、SteamCMD経由でインストールしてそのまま実行しようとしても、
./starbound_server: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./starbound_server) ./starbound_server: /usr/lib/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by ./starbound_server) ./starbound_server: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./starbound_server)
ライブラリのバージョンが古い、というエラーが出て起動しない。
これは32bit版でも64bit版でも起こる問題で、しかし32bit版はSteamCMDに付属するライブラリを利用することで対処できる。
32bit版対処法
SteamCMDを導入した場所にあるlinux32の中にあるlibstdc++.so.6を、starbound_serverが見ている"/usr/lib"に放り込めばいい。
既に同じファイルがあるだろうし、そのまま放り込むと上書きすることになるので、先にリネームしておくことをオススメする。
mv /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6.bak
cp linux32/libstdc++.so.6 /usr/lib/
その上で改めてstarbound_serverを実行すれば鯖が起動するはず。
64bit版対処法
しかし生憎とこれは32bit版のライブラリで、64bit版は付属していない。
なので64bit版の鯖を建てるには何処からかこのライブラリの最新版を見付けてくるか、このライブラリを含むアプリを自分でソースからコンパイルしなければならないんだとか。
ちなみにyumでインストールしようとしても、バージョンが古いので解決しない。
仕方なくGCCを自分でコンパイルしてみようとしたら、こんどはこれをコンパイルする為に他に三個のアプリをソースから(以下略
(ノ`Д´)ノ彡┻━┻
投げた。もう諦めて32bit版で遊ぼう、と思い、鯖の設定に関して調べていたらこの問題に対する対処法を記した記事を公式フォーラムで発見した。
この記事に書かれたURLから必要なライブラリの入ったパッケージが手に入る。
早速ダウンロードして展開し、64bit版のライブラリを置く"/usr/lib64"に放り込んで起動してみた。
が、また別のエラーが発生した。
./starbound_server: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./libgcc_s.so.1)
同じくlibc.so.6を探して/usr/lib64に放り込むがエラーは変化なし。よく見るとディレクトリの指定が違う。
以前はstarbound_serverと同じ階層からライブラリファイルを探していたが、いまはハードコーディングされた固定のパスを探しに行くんだとか。
有志のパッチでそのパスを書き換えることで対処可能とあるが、64bit版なのならコメントの方にもっといい対処法が書かれているらしい。
./ld-linux.so.2 --library-path ./ ./starbound_server
このコマンドで鯖を起動すればいいんだとか。
しかしまずld-linux.so.2とやらが見当たらない。展開したパッケージの中にもない。
パッケージを展開したところに"linux_loader-dont-know-if-you-need-this"というディレクトリがあり、そこに"ld-linux-x86-64.so.2"というものがあるが名前が違う。
しかしよく似ているのでこれでいいんじゃないか? とそれをstarbound_serverと同じディレクトリにコピーし、
cp linux_loader-dont-know-if-you-need-this/ld-linux-x86-64.so.2 .
先程のコマンドを一部書き換えて実行したところ、
./ld-linux-x86-64.so.2 --library-path ./ ./starbound_server
無事に鯖が起動した。