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

时间:2019-01-28 18:32:14

标签: c++ static static-libraries global

我正在链接一个使用静态变量的第三方库。这些最终在main之前被初始化,并过早地抢占资源,这对我的应用程序造成了严重破坏。是否有任何习语/技术/包装方法来重新获得控制权并定义执行点,在该点上,允许库初始化其所有静态变量,而无需对库本身进行改动?

具体来说,我有一个thirdpartylib::system对象,该对象一旦在main中定义,便会在输入main之前获取各种资源。编译器发现可以击中代码,然后开始进行所有静态var的初始化,而不受库使用者的控制。理想情况下,我希望某种警卫制止这种情况,直到我这样说为止。 。

// 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();
}

1 个答案:

答案 0 :(得分:4)

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