c++ - 如果包含 map 的静态库与可执行和动态库链接,静态 map (变量)会被多次释放吗?

标签 c++ static linker

这个问题在这里已经有了答案:





What happens to global and static variables in a shared library when it is dynamically linked?

(3 个回答)


2年前关闭。




我们有一个在静态库中定义的静态 map 。

这个静态库链接到一个动态库。

可执行文件链接静态库以及上述动态库。

两个问题?

a) 静态库代码是否重复?

b) 静态库中定义的静态 map 会有多个拷贝吗? (这会导致可执行文件退出时崩溃)

最佳答案

静态库在编译时链接,而动态库在运行时链接。也就是说,每段编译后的代码都必须包含静态库——有问题的库将静态链接到 .exe 和 .dll。

也就是说,当 DLL 被编译时,它会收到自己的链接和相关静态库的拷贝。使用静态库的可执行文件在编译时也会收到它自己的静态库拷贝。

出于这个原因,.dll 和 .exe 都将运行各自独立的静态库实例。因此,在 .exe 中使用静态库生成的任何变量都将独立于在 .dll 中生成的变量,并且不会被释放,因为这两个拷贝不会交互。

关于c++ - 如果包含 map 的静态库与可执行和动态库链接,静态 map (变量)会被多次释放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59755314/

相关文章:

c++ - C/C++调用依赖分析引用

c++ - map/unordered_map 插入期间内存分配失败

php - 通过调用另一个函数设置函数中的静态变量

c++ - 类静态函数中变量的非静态成员引用

c - 在嵌入式系统中存储/验证校验和

c++ - 如果使用非基本类型,则清除泛型数组会引发逻辑错误

c++ - 在其他计算机上运行 Allegro 5

c# - Xamarin Forms - 从不从 ContentPage 继承的类中查找 App 的当前页面

c++ - Qt 编译问题 w/MySQL - Mac OS X

haskell - GHC 链接器错误(堆栈)