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

标签 c++ static static-libraries global

我正在链接一个使用静态变量的第三方库。它们最终会在 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/

相关文章:

c++ - X3 : How to create parser to read in sets?

c++ - 当试图生成指向带有 decltype 的重载函数的函数指针时,为什么无法指定适当的重载?

c++ - 使用 C++ 设置容器时出错

python 3 : check if method is static

C++ 无状态类的静态初始化

c++ - 库上的静态变量初始化

c++ - 在子 QWidget 中修改父 QWidget

c++ - C++11 中的静态变量初始化是同步的吗?

linux - 我可以让 FIND_LIBRARY 在我的 *custom* 依赖项构建完成后运行吗?

python - 如何在python中导入静态库?