代码之家  ›  专栏  ›  技术社区  ›  Soonts

全局对象的强制构造

  •  1
  • Soonts  · 技术社区  · 7 年前

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

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

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

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

    静态库由DLL使用。全局对象应在DLL\u进程\u附加调用之前构造。

    1 回复  |  直到 7 年前
        1
  •  1
  •   user7860670    7 年前

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

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

    /INCLUDE symbol (vc)
    

    /WHOLEARCHIVE:mylib (vc)
    

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

    推荐文章