gccで共有ライブラリをバイナリに埋め込み

gcc3.4系以降でコンパイルしたバイナリを3.3系以前がインストールされてるサーバで実行しようとするとlibstdc++.so.6:not foundみたいなエラーが出る。どうやらlibstdc++.soのバージョンが違うのが原因っぽい。共有ライブラリのバージョン確認は

ls -l /usr/local/lib | grep libstdc++

とかすればわかる。基本的には実行環境で一番低いバージョンのものをリンクするのが正しい対応なんだろうけど、大量にあるマシンによってインストールされてるライブラリの種類やバージョンがまちまちなので、バイナリのサイズを気にしないなら共有ライブラリを静的リンクして埋め込んでしまえば、実行環境を気にせんでよいという手抜き案で対応。

g++ -o hoge hoge.o hogehoge.o -lstdc++ -static

リンクするときにstaticオプションを付けるだけ。