dlopen 对于同一文件的两次调用会产生相同的句柄吗?

2023-11-23

如果我在同一个应用程序运行中对同一个库/文件使用 dlopen 两次,在这两种情况下它会产生相同的句柄吗?对此有任何保证吗(一个简短的实验表明它至少在我的盒子上如此)?

我目前正在玩一个小插件系统(出于好奇),如果对这种观察到的行为有某种保证,我可以使用这个地址作为插件的密钥来防止重复加载。


是的。这dlopen(3)Linux 手册页说:

   If the same library is loaded again with dlopen(), the same file 
   handle is returned. The dl library maintains reference counts for 
   library handles, so a dynamic library is not deallocated until 
   dlclose() has been called on it as many times as dlopen() 
   has succeeded on it.

顺便说一句,在 Linux 系统上,您可以 dlopen 很多(数十万)共享库,如我的示例manydl.c演示。主要限制是地址空间。 所以实际上,不用担心dlclose-ing 的东西是可能的。

(unless your dlopen-ed shared libraries have weird or resource consuming constructor or destructor functions)

Added in December 2017:

请注意,相关的是传递给的确切路径字符串dlopen。所以如果你使用"./foo.so" and "././foo.so" (or "../foosymlink.so" where foosymlink.so是一个符号链接foo.so)dlopen 处理的句柄不同,在某些情况下,该共享库的两个实例可能会发生奇怪的行为。

added in june 2019:

另请阅读 Drepper 的如何编写共享库论文(它也很好地解释了如何use them!).

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

dlopen 对于同一文件的两次调用会产生相同的句柄吗? 的相关文章

  • 如何将异常对象序列化为 xml 字符串

    我想要类似的东西 try code here catch Exception ex stringXML Exception toXML 这样 stringXML 的值就是
  • 沿着长数据序列在固定大小的移动窗口中查找中值

    给定一个数据序列 可能有重复项 一个固定大小的移动 窗口 从数据开始处每次迭代时移动窗口 序列 使得 1 从窗口中删除最旧的数据元素并添加新数据 元素被推入窗口 2 求每次移动时窗口内数据的中位数 以下帖子没有帮助 有效地找到随机序列的中值
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • 函数的不明确的引用/值版本

    考虑以下函数原型 void Remove SomeContainer Vec const std size t Index SomeContainer Remove SomeContainer Vec const std size t In
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • 使用 CMake 对 SDL 的未定义引用

    我正在使用 SDL v1 2 15 7 和 CMake 3 2 1 开发一个项目 在 h 文件中我添加了 include
  • 如何(可移植地)在 C 和 C++ 中获取 DBL_EPSILON

    我正在 Linux AS 3 上使用 GCC 3 4 并试图找出DBL EPSILON 或者至少是一个不错的近似值 我怎样才能以编程方式获取它 在 C 中是std numeric limits
  • 使用 Process.Start() 打开文件夹时访问被拒绝异常

    我有一个 C 中的 winforms 应用程序 我必须在其中打开某个文件夹 我用 System Diagnostics Process Start pathToFolder 这会导致以下异常 System ComponentModel Wi
  • 有没有办法提高linux管道的性能?

    我正在尝试使用 64 位将超高速数据从一个应用程序传输到另一个应用程序CentOS http en wikipedia org wiki CentOS6 我使用以下方法进行了基准测试dd发现阻碍我的是管道而不是程序中的算法 我的目标是达到
  • C++ 虚拟关键字与重写函数

    我正在学习c 并且正在学习virtual关键字 我在互联网上搜索试图理解它但无济于事 我进入编辑器并做了以下实验 期望它打印两次基本消息 因为我的印象是需要 virtual 关键字来覆盖函数 然而 它打印出了两条不同的消息 有人可以向我解释
  • Ajax 函数在重定向后不保存滚动位置

    正如标题所述 我编写了一个 ajax 函数 该函数应该滚动到用户在重定向之前所在的位置 我写了一个alert对于测试场景 它确实触发了 但滚动不断回到顶部 我在这里做错了什么 JavaScript ajax type GET url Adm
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • 不可能的事情发生了!这是什么意思?

    我遇到了一个有趣的运行时错误 我认为这是某种内存泄漏 我写了以下程序 C Code include
  • 当 C 中没有足够的内存用于静态分配时会发生什么?

    当您动态分配内存时 例如malloc 1024 sizeof char 结果指针设置为NULL如果没有足够的可用内存来满足请求 当没有足够的内存来满足静态分配时会发生什么 例如char c 1024 char c 1024 不一定是静态分配
  • 为什么 C++20 范围不只提供管道语法?

    我知道这个问题听起来很奇怪 所以这里有一些背景信息 最近 我很失望地了解到 C 20 范围内的映射缩减并不像人们所期望的那样工作 即 const double val data transform accumulate 不起作用 你必须这样
  • 验证域用户凭据

    我需要一种方法来验证 Windows 上本机 C 的用户 密码对 输入的是用户名和密码 用户可以是 DOMAIN user 格式 基本上我需要编写一个函数 如果用户 密码是有效的本地帐户 则返回 true 第1部分 如果用户 密码在给定的域
  • C# 或 Windows 相当于 OS X 的 Core Data?

    我迟到了 现在才开始在 OS X Cocoa 中使用 Core Data 它令人难以置信 并且确实改变了我看待事物的方式 C 或现代 Windows 框架中是否有等效的技术 即拥有可免费保存 数据管理 删除 搜索的托管数据类型 还想知道Li
  • 在标准 C 中将 int 转换为 string

    我是 C 新手 我正在寻找一个可以调用函数进行转换的示例int串起来 我发现itoa但这不是标准 C 的一部分 我还发现sprintf str d aInt 但问题是我不知道所需的 str 的大小 因此 我如何传递输出字符串的正确大小 有多
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav

随机推荐

  • jquery - 检测div的底部是否接触浏览器窗口的底部?

    给定页面上的 div 如何检测div何时滚动到浏览器窗口底部的位置 与浏览器窗口底部齐平 我认为上面的答案不起作用 因为 offset top 是 div 和文档顶部之间的空间 并且不是可变的 这对我有用 var a mydiv offse
  • matplotlib:使图例键成为方形

    我正在使用 matplotlib 并且希望在制作条形图时将图例中的键更改为正方形而不是矩形 有没有办法指定这一点 我现在拥有的 我想要的是 Thanks 如果您想要一个非常快速和肮脏的解决方案来获得近似平方 可能需要根据您的绘图进行一些微调
  • 如何在Java中执行无符号到有符号的转换?

    假设我从输入设备读取了这些字节 6F D4 06 40 该数字是毫弧秒格式的经度读数 最高位 0x80000000 基本上始终为零 并且在本问题中被忽略 我可以轻松地将字节转换为unsigned整数 1876166208 但是如何将该无符号
  • 作为好友的模板参数

    在 C 03 中 以下内容是非法的 尽管某些编译器支持它 template
  • 如何判断给定的URL链接是视频还是图片?

    我正在尝试获取用户输入的给定 URL 并确定该 URL 是否指向图像或视频 示例用例 当用户粘贴 YouTube 视频的 URL 时 保存时页面将自动显示嵌入式 YouTube 播放器 当用户在 Flickr 中发布图片的 URL 时 在保
  • 从服务器获取数据后如何将数据存储在房间数据库中

    我在我的 android 应用程序中使用 Retrofit2 和 Rxjava2 作为网络库 使用 NodeJS 和 MongoDB 作为后端服务 我想从服务器获取数据并将数据存储在房间数据库中 以便用户再次打开应用程序时它会从房间获取数据
  • 模型视图投影矩阵的用途

    我们使用模型视图投影矩阵的目的是什么 为什么着色器需要模型视图投影矩阵 模型 视图和投影矩阵是三个独立的矩阵 模型从对象的局部坐标空间映射到世界空间 从世界空间到相机空间的视图 从相机到屏幕的投影 如果您组合了所有三个 则可以使用一个结果从
  • wait((int *)0) 的含义

    一个使用这样的等待函数的程序是 include
  • android Zoom-to-Fit All Markers on Google Map v2 [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 如何放大 缩小地图视图以覆盖所有标记 我正在审查 sdk 中给出的 gmap V2 示例
  • 如何配置分页codeigniter?

    我尝试使用CodeIgniter进行分页 根据Codeigniter的手册 它应该很简单 即使在示例中是这样的 第一个 最后一个 config total rows this gt searchdesc model gt queryallr
  • 调用SKPaymentQueue RestoreCompletedTransactions,无响应

    这里的用例是用户从未购买过我的应用内购买 但点击了 恢复 按钮 我想让用户知道恢复失败 因为没有什么可恢复的 问题是我没有收到任何事件 所以我不知道发生了什么 当我的用户点击界面中的 恢复 按钮时 我调用 SKPaymentQueue de
  • 使用 json 填充下拉列表

    我有包含 id 和 name 列的 SQLite 表 我从 autocomplete php 页面返回这些行的数组 例如 json 如何使用 jquery 和 JavaScript 使用此 json 填充选项 下拉列表 我是 JavaScr
  • 如何解决构建过程中 Android 库自定义属性和包名称重新映射?

    随着时间的推移 我们的 Android 项目已经扩展了很多 现在我们正在从同一源代码树创建多个品牌 APK 由于 Android 的包命名要求 这变得具有挑战性 我们将所有共享代码都放在 Android 库项目中 该项目包含在主应用程序项目
  • 替换 numpy 中的子数组

    给定一个数组 gt gt gt n 2 gt gt gt a numpy array 1 1 1 1 2 3 1 3 4 n gt gt gt a array 1 1 1 1 2 3 1 3 4 1 1 1 1 2 3 1 3 4 我知道可
  • 将 System.Net.mail.MailMessage 保存为 .msg 文件

    我正在构建一个应用程序 我有义务创建一个 MailMessage System Net mail MailMessage 并将其保存在磁盘上作为 msg 扩展名而不是 eml 以下是我用来将 MailMessage 保存为 msg 文件的方
  • Paypal Sandbox 付款状态待定

    我正在使用 Java Rest API 直接从沙箱中的信用卡执行付款 根据文档 所有付款均处于 待处理 状态 https developer paypal com webapps developer docs api create a pa
  • 递归转换目录和子目录中所有文件的所有EOL(dos->unix),无需dos2unix

    如何递归地转换目录和子目录中所有文件的所有 EOL dos gt unix without dos2unix 我没有 无法安装 有没有办法使用tr d r 和管道 如果是这样 怎么办 对于当前目录中的所有文件 您可以使用 Perl 一行代码
  • 如何修复“警告预期“此”将由类方法使用”eslint 错误?

    我正在 React 组件中创建这样的 PDF 导出类 Test 扩展 React PureComponent savePDF const source document getElementById printContainer eslin
  • 这是使用 redux 删除项目的正确方法吗?

    我知道我不应该改变输入 而应该克隆对象来改变它 我遵循 redux 启动项目中使用的约定 该项目使用 ADD ITEM state action gt state items state items action payload value
  • dlopen 对于同一文件的两次调用会产生相同的句柄吗?

    如果我在同一个应用程序运行中对同一个库 文件使用 dlopen 两次 在这两种情况下它会产生相同的句柄吗 对此有任何保证吗 一个简短的实验表明它至少在我的盒子上如此 我目前正在玩一个小插件系统 出于好奇 如果对这种观察到的行为有某种保证 我