为什么 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
.
感兴趣
我们有一个由 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
.