我正在构建一个Xcode静态库项目,其中我将一个类定义为:
class New
{
public:
New() {
// Do something
};
static New fNew;
};
__attribute__((used)) New New::fNew;
静态全局fNew不应该被链接器剥离死代码,因为它已被强制声明为((used))。但我看不到构造函数被调用为New。知道为什么会这样吗?
修改 当我添加一个虚拟函数来返回指向 fNew
的指针时void* getDummyReference()
{
return (void*)&New::fNew;
}
并从同一静态库项目中的另一个文件调用该函数,我不再观察到该问题,并按预期调用构造函数。
为什么即使使用属性((已使用))也会剥离静态全局?