没有 STB_GNU_UNIQUE 的静态链接 stdc++ 在 dlclose 时导致内存泄漏

2024-01-27

我必须制作一个 dso,静态链接 stdc++ 并且需要可以从内存动态卸载。所以我尝试编译 gcc--disable-gnu-unique-object并使用黄金链接-Wl,--no-gnu-unique选项。但两者都包含内存泄漏问题,即使我除了调用之外什么也不做dlopen() dlclose()在主要。测试代码如:

int main()
{
    for(int i=0;i<1000;i++)
    {
        void * h=dlopen(filepath);
        if(h)
             dlclose(h);
    }
    return 0;
}

然后我检查了内存cat /proc/pid/maps前后我发现每次只有堆变化越来越大。大约 90M 在 1000 次调用 dlopen & dlclose 对我来说 90M 仍然太大了。

026fb000-0274e000 rw-p 00000000 00:00 0                                  [heap]

在谷歌搜索了大约两周后,但对这个问题没有任何帮助。只找到一个文档,内容如下here https://www.systutorials.com/docs/linux/man/1-gcc/.

-fno-gnu-唯一在具有最新 GNU 汇编器和 C 库的系统上,C++ 编译器使用“STB_GNU_UNIQUE”绑定来确保 模板静态数据成员和静态局部变量的定义 即使存在“RTLD_LOCAL”,内联函数中的内容也是唯一的; 这是必要的,以避免两个人使用的库出现问题 不同的“RTLD_LOCAL”插件取决于其中之一的定义 他们因此不同意另一方关于约束力的观点 符号。但这会导致受影响的 DSO 忽略“dlclose”; 如果您的程序依赖于通过“dlclose”重新初始化 DSO 并且 “dlopen”,您可以使用-fno-gnu-unique。

这是 Linux 的错误吗?有人可以帮助我解决这个问题吗?谢谢。 环境是gcc 5.3.1。我与定义 _GLIBCXX_USE_CXX11_ABI 链接。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

没有 STB_GNU_UNIQUE 的静态链接 stdc++ 在 dlclose 时导致内存泄漏 的相关文章

  • 什么是内部类的合成反向引用

    我正在寻找应用程序中的内存泄漏 我正在使用的探查器告诉我寻找这些类型的引用 但我不知道我在寻找什么 有人可以解释一下吗 Thanks Elliott 您可以对 OUTER 类进行合成反向引用 但不能对内部类实例进行合成 e g class
  • 大查询中有没有办法执行动态查询,例如sql server中的“EXEC”?

    我有一个包含 200 多个列名的表 这些列名是使用临时名称创建的 例如 custColum1 custColum200 我有一个映射表 其中包含 custColum1 custColumn200 的列表 它必须映射到该名称 例如 Table
  • 如何在 C# / .NET 中创建内存泄漏[重复]

    这个问题在这里已经有答案了 可能的重复 托管代码中是否可能存在内存泄漏 特别是 C 3 0 https stackoverflow com questions 6436620 is it possible to have a memory
  • 与新 Apple Music 应用程序中相同的动态状态栏

    是否可以动态着色statusBar这是在新的苹果音乐应用程序 Edit iOS 8 4 中的新 Apple Music 应用程序具有此功能 打开应用程序 选择并播放歌曲 状态栏为白色 向下滑动播放器控制器以查看 我的音乐 控制器 它有黑色状
  • 内存调试:如何获取 Linux 用户空间/内核空间中的锁定页面信息

    有什么方法可以获取Linux用户空间 内核空间中的锁定页面 虚拟内存页面 信息 我想了解详细信息 例如 谁锁定了页面 有多少页被锁定 进程名称 谁锁定了页面 还让我了解内核空间和用户空间的内存调试技术 对于内存中的每个页面 都会为其分配标志
  • 通过 jQuery 选择动态 HTML 元素

    我正在构建一个 ASP NET MVC 应用程序 并且正在使用jQuery Blueimp https github com blueimp jQuery File Upload动态添加到页面的 PartialView 上的插件 根据插件的
  • 动态 C#.NET Web 服务

    我在 C ASP NET 项目中使用一个类 允许用某种随机脚本语言编写的脚本动态公开 Web 服务方法 换句话说 该脚本应该能够公开具有任何签名的任何名称的方法 只要因为它是有效的 无论如何 通过这个 SOAP 接口向外界发送 能够随意添加
  • Android NDK 中使用“dynamic_cast”时出现“UnsatisfiedLinkError”

    我是 Android 开发新手 我面临下一个问题 当我使用 C 代码时 动态演员 表达方式 不满意的链接错误 当我在模拟器上启动应用程序时出现 但是当我在没有它的情况下运行应用程序时 一切正常 我的意思是 LogCat 没有任何错误 我尝试
  • 向 ExpandoObject 添加方法时,“关键字 'this' 在静态属性、静态方法或静态字段初始值设定项中无效”

    我尝试向 ExpandoObject 添加一个动态方法 该方法将返回属性 动态添加 给它 但它总是给我错误 我在这里做错了什么吗 using System using System Collections Generic using Sys
  • 错误“无法将‘动态’类型的值分配给‘字符串’类型的变量。”在 Dart 2.2 中

    自上次 dart 更新 2 2 我收到这个错误 dynamic 类型的值不能分配给 dynamic 类型的变量 细绳 这对我来说没有多大意义 代码非常简单 class EmployeeMirror EmployeeMirror this i
  • Node.js 进程内存不足错误

    FATAL ERROR CALL AND RETRY 2 Allocation Failed process out of memory 我看到这个错误 但不太确定它来自哪里 我正在从事的项目有以下基本工作流程 从其他来源接收 XML 帖子
  • 内存泄漏在哪里?

    我使用 InetAddress 来解析 IP 地址 但现在如果 IP 不可用 则需要存储主机名 所以我介绍了一个班级Host case class Host name String ip InetAddress import Host ad
  • 库和可执行文件的大小

    我有一个在 Windows 上使用 MSVC 创建的静态库 lib 库的大小为 70KB 然后我有一个链接该库的应用程序 但现在最终可执行文件 exe 的大小为 29KB 小于库 我想知道的是 由于该库是静态链接的 我认为它应该直接添加到可
  • AJAX VS PHP 动态网页?

    当您只能使用 php 来实现动态网页时 为什么要使用 AJAX 呢 使用 AJAX 的主要原因是用户体验 UX 现在 AJAX 不一定会改善每个实例的用户体验 所以在很多地方坚持使用纯 PHP 完全没问题 但想象一下这样的情况 网站上有一个
  • UserControl 中的 Web 控件为空?

    我构建了一个小型用户控件 它本质上是一个 DropDownList 其中包含一些基于目标属性设置的预设值 这是代码 public partial class Selector System Web UI UserControl public
  • 从字典创建 Swift 对象

    如何根据 Swift 字典中的查找值动态实例化类型 希望这对其他人有用 我们需要进行一些研究才能弄清楚这一点 目标是避免巨大的 if 或 switch 语句从值创建每个对象类型的反模式 class NamedItem CustomStrin
  • Java Thread.sleep 泄漏线程?

    因此 我继承了一些等待来自网络源的通信的代码 当它等待来自网络套接字的更多数据时 Thread sleep 10 叫做 这似乎导致了线程泄漏 正如 jconsole 和我的线程转储所报告的那样 Thread 68 Thread 385 等有
  • 演示如何在 C# 4.0 中使用新的“dynamic”关键字

    这是 4 0 版本中新的 C 未来 称为动态 告诉我如何在我的代码中使用它以及这个未来可以如何帮助我 相关问题 新的 dynamic C 4 0 关键字是否弃用了 var 关键字 https stackoverflow com questi
  • 如何反映动态对象的成员?

    我需要从 NET 4 中使用动态关键字声明的对象中获取属性及其值的字典 看来使用反射来实现这一点是行不通的 Example dynamic s new ExpandoObject s Path Home s Name Home How do
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List

随机推荐