Python 共享库:RTLD_GLOBAL 段错误

2023-12-06

我使用 python swig 包装的 C++ 库。在它的__init__.py文件,它sets在导入包含实现代码的共享对象文件之前,使用 dlopen 标志 RTLD_GLOBAL。

这会导致随后导入 scipy.linalg 出现段错误,至少在我的机器上是这样。我认为这种行为取决于 scipy 的构建方式以及它所链接的内容。

# minimal example of what's going on
$ cat test.py
import sys
import ctypes
flags = sys.getdlopenflags()
sys.setdlopenflags(flags | ctypes.RTLD_GLOBAL)
import scipy.linalg

$ python test.py
[1]    16886 segmentation fault (core dumped)  python test.py
  1. 为什么会出现这种情况?到底是怎么回事?
  2. 在什么情况下可能需要设置 RTLD_GLOBAL?我使用的代码包含comment“# 以下是允许 POSIX“dlopen”功能工作所需的邪恶咒语。我不明白它。如果知道更好的解决方案,请转发给 PyOpenMM 代码维护者。”当我删除sys.setdlopenflags(flags | ctypes.RTLD_GLOBAL)行,一切似乎都与库一起正常工作,所以这可能是特定于某些 python 版本或平台的?

您遇到了用于构建 SciPy 的 f2py 工具中的错误。请在此处查看更多详细信息:https://github.com/numpy/numpy/issues/2521

不幸的是,您只能通过重建 SciPy 或删除RTLD_GLOBAL flag.

发生的事情是 NumPy 和 SciPy 都使用符号PyArray_API,以及RTLD_GLOBAL标志强制 SciPy(尝试)导出自己的副本。这会导致冲突和段错误。 (如果有人能更详细地解释这一点,我很想知道)

RTLD_GLOBAL使共享库中的符号公开并可用于重定位。当您通过 dlopen() 导入多个使用彼此符号的单独库时,需要这样做。在 Python 中,当单个项目 (PyOpenMM) 由多个二进制子模块组成,并且这些子模块想要共享其中一个子模块提供的通用功能时,就会出现这种情况。 “一切似乎都工作正常”这一事实可能仅仅意味着您没有使用任何需要共享功能的东西——或者 PyOpenMM 实际上不再需要这个。

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

Python 共享库:RTLD_GLOBAL 段错误 的相关文章

随机推荐

  • 在运行时修改 Hikari 属性

    在哪里可以找到有关可在运行时修改的 Hikari 属性的信息 我尝试修改连接超时 我可以做到 并且会在HikariDataSource没有异常 通过设置然后获取属性进行检查 但没有任何效果 如果我最初这样做 HikariConfig con
  • React 路由在 facebook 的 create-react-app 构建中不起作用

    我正在使用反应路由器来定义路由 我正在使用创建反应应用程序为了发展 我的问题是 如果我在地址栏中输入子页面的 url 并尝试访问它 它在开发版本中有效 但在生产版本中无效 我正在使用一个简单的快速服务器来托管生产构建 var express
  • 递归删除

    我有这段代码可以递归删除文件和目录 它工作正常 但有一个小问题 如果 path var www foo 它将删除 foo 内部的所有内容 但不会删除 foo 我也想删除 foo 目录 任何想法 public function delete
  • 为什么 jQuery spritely 动画在第二个 mouseenter 上播放额外的帧?

    我正在使用 CSS sprites 和 jQuery 插件spritely 我有一个超级马里奥图像 当滚动时 我希望播放动画 当您将鼠标从超级马里奥 这是一个 div 元素 我希望动画反向播放到它开始的原始位置 这是我到目前为止所拥有的 d
  • 通过 jsch 上传 zip 文件到 sftp 站点时输入流已关闭错误

    将 zip 文件上传到 SFTP 时 我们收到以下错误 相同的代码对于另一个应用程序运行良好 我们使用 jsch 0 1 44 jar 进行 SFTP 连接 java io IOException inputstream is closed
  • 如何在 Material Angle 中创建多个主题?

    我想在我的应用程序中应用蓝色 浅蓝色 绿色和橙色阴影 我正在使用材质角度主题部分 但不知道如何使用 我必须创建 css 或js或指令 1 首先经过主题文档在这里 2 从调色板中选取颜色 link 3 使用您想要的颜色创建您自己的自定义主题
  • 使用 @Url.Content("~") 有什么好处

    我是 MVC4 razor2 的新手 我认为了解使用的一般好处 Url Content and Url Action 如果我的路由或虚拟目录发生变化 magic url strings 会正确呈现 我正在查看一些遗留的 Javascript
  • 使用WebClient在Unity3d中下载大文件

    我正在寻找有关使用 WebClient 在 Unity3d 中下载大型 100mg 文件的任何想法 WWW 异步运行 除了返回内存错误并使应用程序崩溃之外 这将是完美的 因此我已转向此处概述的解决方案 如何在C Sharp中使用unity3
  • 将 JScrollPane 组件添加到 JTable 列

    我正在尝试向 JTable 中的特定列添加滚动功能 我已经实现了一个自定义 TableCellRenderer 组件 我可以很好地看到表格内的滚动窗格 但我无法滚动它 我也尝试过实现 TableCellEditor 但没有任何运气 publ
  • Symfony2 自定义错误异常监听器 - 渲染模板或传递给控制器

    我正在尝试找出在 Symfony2 中处理自定义错误页面的最佳方法 这包括 500 和 404 等 我可以创建自己的自定义模板 error404 html twig 等 并很好地渲染它们 问题是 应用程序需要将一些变量传递到基本模板中以使页
  • 如何避免javascript命名空间冲突?

    我有一个企业应用程序 它导入一些java脚本库 假设A 以及全局命名空间中的一些函数 我们的客户可以扩展我们的平台并导入 jquery 这将导致命名空间冲突 对我来说 帮助客户避免命名空间冲突的最佳方法是什么 因为 jquery 非常流行并
  • 将“numpy.mean”与元组一起用作“axis”参数:不适用于屏蔽数组

    我有一个简单的 3D 数组a1 及其掩码模拟a2 import numpy a1 numpy array 0 00 0 00 0 00 0 88 0 80 0 78 0 75 0 78 0 77 0 00 0 00 0 00 3 29 3
  • ASP.NET mvc 身份验证或会话过期速度比设置的要快

    在我的 ASP NET MVC5 中websiteweb config中的登录和会话超时如下
  • WinForms:当鼠标进入控件时如何使MouseEnter触发?

    我有一个Panel其中包含任意数量的子控件 如果鼠标进入子控件之一Panel 然后MouseEnter事件的Panel没有被解雇 Note 一个相关的问题是 如果鼠标从panel到其中之一子控件 那么专家组的MouseLeave事件被触发
  • jenkins - 无法 ssh 到远程服务器(密钥 - 权限被拒绝),但可以从 cli 工作

    我在本地计算机上运行 Jenkins 试图找出服务器上遇到的远程 ssh 问题 我收到此权限被拒绝错误 这表明密钥有问题 但从 shell 上的同一用户帐户 我绝对可以连接 Started by user anonymous Buildin
  • Javascript正则表达式尝试将名称拆分为标题/名字/姓氏

    我想尝试在 Javascript 中检测一个人名字的不同部分 并将它们剪掉 以便我可以将它们传递给其他东西 名称可以以任何格式出现 例如 维多利亚小姐莱恩 龙志杰小姐 鲍勃 史密斯 Fred Mr Davis 我想尝试写一些简单的东西 这样
  • Visual Studio 设置和部署:添加先决条件

    如何将我希望客户端拥有更多组件的设置和部署项目添加到其中 例如 Microsoft Chart Controls Microsoft SQL 2008 Express Edition not 2005 etc 替代文本http img55
  • 获取上周六的日期 - BusyBox 1.1.0

    由于 BusyBox 中的日期功能不如gnu date 我在计算上周六的日期时遇到问题 last sat date Y m d d last saturday 只适用于 gnu date 我发现了类似的东西可以从 Epoch 计算 busy
  • MVC Web Api 不允许 Windows 身份验证

    我有一个简单的 MVC web api 2 IIS 托管应用程序 我想启用 Windows 身份验证 最初不使用 Owin 我在我的开发机器上运行它并作为本地 IIS 运行 因此 根据我所能找到的 我需要将以下内容添加到 web confi
  • Python 共享库:RTLD_GLOBAL 段错误

    我使用 python swig 包装的 C 库 在它的 init py文件 它sets在导入包含实现代码的共享对象文件之前 使用 dlopen 标志 RTLD GLOBAL 这会导致随后导入 scipy linalg 出现段错误 至少在我的