延迟第三方库中静态变量的初始化

Delay initialisation of static variables in a 3rd party library

本文关键字:变量 初始化 静态 第三方 延迟      更新时间:2023-10-16

我正在链接到使用静态变量的第三方库。这些最终会在main之前初始化并过早地抢夺资源,从而对我的应用程序造成一些破坏。是否有任何习语/技术/包装方法,以重新获得控制权并定义允许库初始化其所有静态变量而不入侵库本身的执行点?

具体来说,我有一个thirdpartylib::system对象,一旦在 main 中定义,就会在输入 main 之前获取各种资源。编译器看到代码可以被命中,然后开始初始化其所有静态变量,不受库使用者的控制。理想情况下,我希望某种警卫阻止这种情况,直到我这么说,比如..

// my code that may exit before I want the lib stuff to be invoked
{
    LET_SYSTEM_RUN_RIOT();
    thirdpartylib::system sys;
    // do some stuff with it
    KILL_IT_ALL_WITH_FIRE();
}

您唯一能做的就是动态构建它,并在运行时通过dload/LoadLibrary加载它。然后,您可以完全控制库何时初始化自身。通过静态链接,您在概念上使库成为应用程序的一部分,这意味着它将作为应用程序的一部分进行初始化,即在您的主函数之前。