c++ - 共享库中本地范围内静态变量的生命周期
问题描述
我对本地范围内静态变量的销毁时间有疑问。假设我们有一个名为的共享库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;
}
问题是,卸载rt
和plugin
库的顺序是在 Linux 上严格定义的吗?在 Windows 上?我担心的是plugin
库可以在rt
库之前卸载,因此静态instance
变量的析构函数会崩溃。
解决方案
推荐阅读
- spring-boot - 限制 Spring WebFlux 上的 HTTP 响应大小
- go - 如何从gorm中的模型中获取表名?
- javascript - Javascript / ES6 从对象数组中解析值
- mongodb - $lookup 使用猫鼬
- java - 为什么在junit测试期间多次初始化bean?
- crystal-lang - 呼叫阻止呼叫不起作用
- hadoop - 如何使用 BDM(Informatica)将文件从本地文件系统复制到 hdfs 文件系统?
- java - JOLT:将逗号分隔值转换为对象
- c# - 在 Windows 服务器中使用正确的设置和配置设置 Elasticsearch 以供生产使用
- javascript - 使用 if、else if 和 else 时出现意外的标记 else