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

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

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

但是当我们在App层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 链接器标志。

This question 有更多详细信息。您可能还对 -ObjC-force_load.

感兴趣