延迟第三方库中静态变量的初始化
Delay initialisation of static variables in a 3rd party library
我正在链接一个使用静态变量的第三方库。这些最终会在 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 加载它。然后您就可以完全控制库何时自行初始化。通过静态链接,您在概念上使库成为您应用程序的一部分,这意味着它将作为您应用程序的一部分进行初始化,即在您的主要功能之前。
我正在链接一个使用静态变量的第三方库。这些最终会在 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 加载它。然后您就可以完全控制库何时自行初始化。通过静态链接,您在概念上使库成为您应用程序的一部分,这意味着它将作为您应用程序的一部分进行初始化,即在您的主要功能之前。