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で続行