必须安装 libgcc_s.so.1 才能使 pthread_cancel 工作

Posted

技术标签:

【中文标题】必须安装 libgcc_s.so.1 才能使 pthread_cancel 工作【英文标题】:libgcc_s.so.1 must be installed for pthread_cancel to work 【发布时间】:2021-02-24 02:23:02 【问题描述】:

我在 python 上;我正在尝试关闭通过 ThreadPoolExecutor 运行的函数,但关闭时因错误而崩溃:

libgcc_s.so.1 must be installed for pthread_cancel to work

函数提交:

record_future = self.executor.submit(next,primitive)

primitive 是一个迭代器,通常会返回一个值,但在某些情况下,它需要等待一段时间才能返回一个值(因为计算时间长等)。在这些情况下,当我需要关闭正在运行的线程时,我不能等待迭代器完成返回,需要立即关闭它。我做到了:

executor.shutdown(wait=False)

但是,当执行到这一点时,我得到了 libgcc 错误。

我尝试通过手动安装来“解决”它:

apt-get install libgcc1:amd64

但没有骰子。我不确定python到底在哪里寻找这个库,否则我会尝试创建一个符号链接,因为该库已经安装在:

$ /sbin/ldconfig -p | grep libgcc
libgcc_s.so.1 (libc6,x32) => /usr/libx32/libgcc_s.so.1
libgcc_s.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libgcc_s.so.1
libgcc_s.so.1 (libc6) => /usr/lib32/libgcc_s.so.1

【问题讨论】:

【参考方案1】:

您使用的是 Python 3.7 还是 3.8?

使用我的 Anaconda Python 3.8 在 Python 的 sounddevice 中也遇到此错误,但使用我的 Anaconda Python 3.7 时不会发生此错误。我已经在谷歌搜索中测试了所有的解决方法,并确保所有相关的包和库都是相同的版本,它仍然不起作用。我的最后一个猜想是 Python 3.8 和 3.7 的版本差异。虽然可能不是这样^_^

【讨论】:

我在 Python 3.8.0 中使用 tqdm 包时遇到了同样的错误。 Python 3.6.9 也不会发生这种情况。我没有任何想法,但我找到了bugs.ams1.psf.io/issue42888 我已经仔细检查过,我很确定 libgcc_s.so.1 已安装并可访问。似乎是 Python 3.8 的延迟加载动态库特性导致它出现在多个包中。【参考方案2】:

我在Python mailing list 中发现了一种潜在的解决方法,即通过ctypes 显式加载libgcc_.so.1,如下所示:

import ctypes
libgcc_s = ctypes.CDLL('libgcc_s.so.1')

必须确保在创建任何线程之前加载它,并且变量libgcc_s 一直持续到所有线程都关闭(即将它放在文件的开头)。

【讨论】:

我试过这个方法,但我现在得到以下信息:` OSError: /mnt/d/Projects/EBKA/edna_env/lib/python3.7/site-packages/mysql/vendor/libssl. so.1.1:符号 EVP_idea_cbc 版本 OPENSSL_1_1_0 未在文件 libcrypto.so.1.1 中定义,链接时间参考 ` 我有 python 多线程的 libgcc_s.so.1 问题。首先,我在使用这个解决方案时遇到了 OSError,就像 @asuprem 一样。然后,在任何导入解决它之前将解决方案放在我的代码顶部

以上是关于必须安装 libgcc_s.so.1 才能使 pthread_cancel 工作的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Heroku 上部署 Streamlit 应用程序 - 缺少 libgcc_s.so.1

ImportError: 无法导入 pydot。您必须安装 pydot 和 graphviz 才能使 `pydotprint` 工作

始终必须删除 node_modules 并再次重新安装软件包才能使 npm run prod 正常工作

查看一个rpm包中包含那些文件/文件属于哪个rpm包

我必须使用啥 PDF 格式或属性才能使 FPDM 工作?

必须打印到屏幕才能使程序正常工作