2010年01月08日
static-libstdc++ オプション
GCC 4.5 から、libstdc++ のみをスタティックリンクするための -static-libstdc++ オプションが追加されたそうです。
「PATCH RFA: Add -static-libstdc++ option to g++」
http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html
g++ は、過去のバージョンアップで何度か ABI が変わっています(2.95、3.1、3.3、4.0 で互換性が失われているそうです)し、これからも変わる可能性があります。
そのため、場合によっては適切な libstdc++ がダイナミックリンクできなくて、プログラムが動かなくなる可能性があります。
例えば上記の patch の説明では、gcc 自身を g++ でブートストラップする場合などが挙げられています。ビルドプロセスの途中で ABI が異なる g++ が複数動くことになると、ダイナミックリンクでは当然上手く動きません。
注意点として、libstdc++ をダイナミックリンクする C++ コードを dlopen() などを経由して使うことができなくなるようです。
「Re: -static-libgcc, static libstdc++.a and dynamicly loaded so files」
http://gcc.gnu.org/ml/gcc-help/2009-12/msg00186.html
「PATCH RFA: Add -static-libstdc++ option to g++」
http://gcc.gnu.org/ml/gcc-patches/2009-06/msg01635.html
g++ は、過去のバージョンアップで何度か ABI が変わっています(2.95、3.1、3.3、4.0 で互換性が失われているそうです)し、これからも変わる可能性があります。
そのため、場合によっては適切な libstdc++ がダイナミックリンクできなくて、プログラムが動かなくなる可能性があります。
例えば上記の patch の説明では、gcc 自身を g++ でブートストラップする場合などが挙げられています。ビルドプロセスの途中で ABI が異なる g++ が複数動くことになると、ダイナミックリンクでは当然上手く動きません。
注意点として、libstdc++ をダイナミックリンクする C++ コードを dlopen() などを経由して使うことができなくなるようです。
「Re: -static-libgcc, static libstdc++.a and dynamicly loaded so files」
http://gcc.gnu.org/ml/gcc-help/2009-12/msg00186.html