gpt4 book ai didi

c++ - 使用 dlopen 加载库时具有静态存储行为的动态变量

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:34:04 29 4
gpt4 key购买 nike

我在 C 库中定义了一个全局变量 [例如:int globalcount = 0]并且在库初始化函数中 [say library_init] globalcount 递增 1。

这里的问题是:当使用 dlopen 和 appln 调用 library_init 函数打开库并使用 dlclose 关闭库时,再次调用 dlopen 会将 globalcount 重置为 0。

我想知道如何防止全局变量重置 [我希望 globalcount 必须是 1 而不是 0]当调用下一个 dlopen 时,因为进程没有退出,所以全局变量也不能重置。

如果在链接时使用 -l 链接到进程的库,我不会遇到 abv 问题。仅当使用 dlopen/dlclose [多次] 打开库时才会出现此问题

操作系统是Linux程兰:C编译器:gcc

dlclose 调用时数据段内存不能释放怎么办?

最佳答案

当您调用 dlclose 时,您的 dll 被卸载,这意味着您的库的数据段中的所有内存都被释放。这就是将值重置为 0 的原因。您可以使用 shared memory拥有一个即使在您的库被卸载时也能持久存在的变量。

关于c++ - 使用 dlopen 加载库时具有静态存储行为的动态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8018649/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com