代码如下:
struct S
{
S()
{
__debugbreak();
}
};
static const S g_s;
显然,我希望一些代码在启动时运行。
这仅适用于某些具有外部代码引用的符号的源文件。对于静态库中没有任何从外部引用的符号的源文件,看起来编译器或链接器会删除完整的编译单元,因此不会构造全局对象。
有没有办法强制构造静态对象,或者以其他方式强制在启动时运行代码?
我已经仔细检查了这些源文件的编译设置,它们是相同的,并且它们位于同一个静态库项目中。
静态库由 DLL 使用。全局对象预计在 DLL_PROCESS_ATTACH 调用之前构建。
您将需要使用链接器选项链接此库中的“所有内容”,例如
-Wl--whole-archive -lmylib -Wl--no-whole-archive (gcc)
or
/INCLUDE symbol (vc)
or
/WHOLEARCHIVE:mylib (vc)
然而,依赖动态初始化阶段和/或在程序启动/DLL 加载期间对全局对象的状态进行假设将使您的程序注定失败。所以你应该考虑显式初始化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)