gcc 4.5.2 の -O2 に問題があります。このコードがあるとします:
//file.cpp
void test::f() {}
//file.h
struct test
{
inline void f();
};
このコードは共有ライブラリにあります。これで、-O2 なしでコンパイルすると、問題なく動作します。-O2 を指定すると、test::f() は未定義のシンボルであることがわかります。明らかに、「インライン」であるため、gcc はそれを破棄します (実際にはそうではありません)。
私の質問は、これを引き起こす特定の最適化フラグは何ですか? アイデアは、-O2 を有効にしたいが、その正確なフラグを無効にして、インラインをそのままにしておくことができるようにすることです (それは私のコードではありません)。
私はおそらくそれらすべてを反復することができますが、これはリンカーフラグでもありますよね? これは大変な作業です。誰かが手掛かりを持っていることを願っています。