閉じる

お名前.comのレンタルサーバ(RSプラン)で最新の gccを使う

ccのバージョンがめちゃくちゃ古い。

$ cc --version
cc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

最新とまではいかないまでも新し目な C++を前提としたソースは全くコンパイルできず、他のレンタルサーバを確認してみるも、揃って「cc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)」だったりする。
これはもうそういうものだと割り切り、少し新し目の gcc 8.3.0をビルドしてみる。*1

wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz
tar xvfzp gcc-8.3.0.tar.gz
cd gcc-8.3.0
./contrib/download_prerequisites
cd ..
mkdir build
cd build/
../gcc-8.3.0/configure --prefix=$HOME/.local --enable-languages=c,c++ --disable-multilib --disable-bootstrap

ここまでは CORESERVERでやったという記録のまま。
FYI: レンタルサーバーCORESERVERにgcc/g++8.3をソースからインストールして使う

インストールされた gccによるビルドは問題ないけど、実行時に .soが見つからないと怒られてしまうの自体は同じ。
コマンドラインからは「export LD_LIBRARY_PATH=~/.local/lib64/」としてやれば問題ないけど、cgiとして動かす場合に問題になる。

./getdatabase.cgi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./getdatabase.cgi)
./getdatabase.cgi: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by ./getdatabase.cgi)
./getdatabase.cgi: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./getdatabase.cgi)

件の記事では「-static-libstdc++ -static-libgcc」でうまくいくようだけど、うちの環境では駄目だった。
「-static」なんかも試してみたけど駄目で、最終的には「-lstdc++」の代わりに「~/.local/lib64/libstdc++.a」として stdc++をスタティックリンクしてやることで解決した。


*1 最新は 12.2.0のようだけど、ビルドに失敗する&とりあえず 8.3.0で十分なので、8.3.0で続行

コメントを残す

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

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)