我有一个现有的应用程序,它使用了几个静态库(我正在编译所有这些库)。我在命令行上使用make
和clang
进行编译,而不使用IDE。在Xcode 7.3之前,所有编译和执行都如我所料。使用Xcode 7.3,在我的发布版本中(添加了-O2
)我发现了虚拟内联函数的奇怪行为 - 有时它们会完全返回垃圾值。这似乎发生在只有 虚拟内联方法的类中,例如:
class MyClass
{
public:
virtual ~MyClass() { }
virtual int foo() { return 1; }
};
在我对该问题的调查中(尝试了几个相关的编译标志),似乎添加-fno-inlines
和/或-fvisibility-inlines-hidden
解决了这个问题,程序按预期执行。但是,根据我的理解,这些只是关于如何优化的提示,而不应该影响程序执行(具体来说,第二个应该只影响我不使用的DSO)。这引出了几个问题: