2024-09-27 00:17:37 发布
网友
我得到了一个segfault(“非法操作(核心转储)”),用于一个python程序,我已经运行了很多年了,每周都没有错误。我还在Nitrous上运行Ubuntu。我记得以前用C编写代码时,我和这些yonks打过交道,最近我还没怎么和他们打过交道。你知道吗
导入库urllib3似乎是导致问题的原因。有人知道解决办法吗?你知道吗
另外,是否有人可以建议或链接到未来诊断这些问题的最佳工作流?你知道吗
谢谢!你知道吗
"Illegal operation"
这个通常意味着您正在一个能力较弱的处理器(例如Ivy Bridge)上运行为一个能力更强的处理器(例如Haswell)编译的代码。你知道吗
Importing the library urllib3 seems to be causing the problem.
在我的Ubuntu机器上,import urllib3加载libssl.so.1.0.0、libcrypto.so.1.0.0和_ssl.x86_64-linux-gnu.so。这些加密库很可能是用处理器可能不支持的AVX、AVX2等指令编译的。你知道吗
import urllib3
libssl.so.1.0.0
libcrypto.so.1.0.0
_ssl.x86_64-linux-gnu.so
best workflow for diagnosing these problems
第一步应该是找出导致SIGILL的指令。为此,运行:
SIGILL
gdb python (gdb) run >>> import urllib3 # do whatever is necessary to reproduce SIGILL (gdb) x/i $pc (gdb) info sym $pc
上面的最后两个命令应该给出导致SIGILL的指令,以及使用该指令的库。一旦你知道那条指令是什么,你就可以确认你的处理器不支持它,并联系“有罪”库的分发者以获得一个不同的编译(一个没有使用你的CPU不支持的指令的编译)。你知道吗
这个通常意味着您正在一个能力较弱的处理器(例如Ivy Bridge)上运行为一个能力更强的处理器(例如Haswell)编译的代码。你知道吗
在我的Ubuntu机器上,
import urllib3
加载libssl.so.1.0.0
、libcrypto.so.1.0.0
和_ssl.x86_64-linux-gnu.so
。这些加密库很可能是用处理器可能不支持的AVX、AVX2等指令编译的。你知道吗第一步应该是找出导致
SIGILL
的指令。为此,运行:上面的最后两个命令应该给出导致
SIGILL
的指令,以及使用该指令的库。一旦你知道那条指令是什么,你就可以确认你的处理器不支持它,并联系“有罪”库的分发者以获得一个不同的编译(一个没有使用你的CPU不支持的指令的编译)。你知道吗相关问题 更多 >
编程相关推荐