为什么 Clang++ 不在另一个静态库中运行全局对象构造函数?

Why Clang++ doesn't run the global object constructor in another static library?

本文关键字:全局 运行 对象 构造函数 Clang++ 另一个 静态 为什么      更新时间:2023-10-16

我们有一个由 clang++ 构建static_library.a库,并且有一个文件bar.cpp包含一个全局对象Foo

但是当我们在 App Layer Xcode 项目中使用该库时,但不会调用全局对象Foo构造函数。(全局对象构造函数将执行一些注册作业,并影响应用行为。

我们认为翻译单元没有链接到可执行文件中。

//bar.cpp in static_library.a
class Foo
{
public:
   Foo()
   {
       std::cout << " constructor called" << std::endl;
   }
};
Foo a;
// <------If this function is called in the App layer project, the
// global constructor object will be called. 
Foo* getInstance()  
{
   return &a;
}

那么有没有可以控制这种行为的标志呢?

您很可能需要-all_load链接器标志。

这个问题有更详细的信息。您可能也对-ObjC-force_load感兴趣。