gpt4 book ai didi

c++ - 强制构建一个全局对象

转载 作者:行者123 更新时间:2023-11-30 04:52:54 24 4
gpt4 key购买 nike

代码如下:

struct S
{
S()
{
__debugbreak();
}
};
static const S g_s;

显然,我希望在启动时运行一些代码。

这仅适用于某些源文件,这些文件具有被外部代码引用的符号。对于没有从外部引用任何符号的静态库中的源文件,看起来编译器或链接器会丢弃完整的编译单元,因此不会构造全局对象。

有没有办法强制构建静态对象,或者强制在启动时运行代码?

我仔细检查了这些源文件的编译设置,它们是相同的,并且它们在同一个静态库项目中。

静态库由DLL 使用。全局对象应在 DLL_PROCESS_ATTACH 调用之前构造。

最佳答案

您将需要使用链接器选项链接此库中的“所有内容”

-Wl--whole-archive -lmylib -Wl--no-whole-archive (gcc)

/INCLUDE symbol (vc)

/WHOLEARCHIVE:mylib (vc)

然而,依赖动态初始化阶段和/或在程序启动/dll 加载期间对全局对象的状态做出假设会使您的程序注定失败。因此,您应该考虑显式初始化。

关于c++ - 强制构建一个全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54055604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com