首页 > 解决方案 > 共享库中本地范围内静态变量的生命周期

问题描述

我对本地范围内静态变量的销毁时间有疑问。假设我们有一个名为的共享库plugin,它被另一个名为 的共享库使用rt。此外,还有一个使用该rt库的应用程序。所有依赖项都是显式的。没有dlopen/ LibraryLoad

// libplugin.so | plugin.dll
namespace plugin {
struct storage {
    storage(int sz) : bytes(sz) {}
    ~storage() = default;
    std::vector<uint8_t> bytes;
};
}
// librt.so | rt.dll
namespace rt {
std::unordered_map<int, plugin::storage> &cached_storages() {
    static std::unordered_map<int, plugin::storage> instance;
    return instance;
}

void do_somework() {
    auto &storages = cached_storages();
    // do some work with storages
}
}
// User's app
int main() {
    rt::do_somework();
    return 0;
}

问题是,卸载rtplugin库的顺序是在 Linux 上严格定义的吗?在 Windows 上?我担心的是plugin库可以在rt库之前卸载,因此静态instance变量的析构函数会崩溃。

标签: c++shared-librariesstatic-variables

解决方案


推荐阅读