我对 gcc 4.5.2 中的 -O2 有疑问。说我有这个代码:
//file.cpp
void test::f() {}
//file.h
struct test
{
inline void f();
};
此代码在共享库中。现在,当我在没有 -O2 的情况下编译时,它工作正常。使用 -O2 表示 test::f() 是未定义的符号。显然 gcc 只是把它扔掉,因为它是“内联的”(尽管它实际上不是)。
我的问题是什么特定的优化标志会导致这种情况?这个想法是我想启用 -O2 但禁用该确切标志,以便我可以保持内联不受影响(这不是我的代码)。
我可能只是迭代所有这些,但是,这也可以是链接器标志,对吗?这工作太多了,我只希望有人能提供线索。