我正在链接一个使用静态变量的第三方库。它们最终会在 main
之前初始化并过早地获取资源,从而对我的应用程序造成一些严重破坏。是否有任何习惯用法/技术/包装方法,可以重新获得控制权并定义允许库初始化其所有静态变量而无需攻击库本身的执行点?
具体来说,我有一个 thirdpartylib::system
对象,该对象一旦在 main 中定义,就会在输入 main 之前获取各种资源。编译器发现代码可以被命中,然后开始初始化其所有静态变量,不受库使用者的控制。理想情况下,我希望有某种 guard 来阻止这一切,直到我这么说,比如。 。
// 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 加载它。然后您就可以完全控制库何时初始化自身。通过静态链接,您在概念上使库成为应用程序的一部分,这意味着它将作为应用程序的一部分进行初始化,即在主函数之前。
关于c++ - 延迟第三方库中静态变量的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54408208/