导入opencv时出现Python3重新链接问题

Posted

技术标签:

【中文标题】导入opencv时出现Python3重新链接问题【英文标题】:Python3 Relink issue while importing opencv 【发布时间】:2020-01-24 10:08:55 【问题描述】:

问题:

尝试在 Ubuntu 18.04 上从 github 导入最新可用的 OpenCV 的新编译版本后出现分段错误。

这是我在尝试将cv2 导入Python 3 时收到的错误消息:

$ python3
Python 3.6.8 (default, Aug 20 2019, 17:12:48) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
python3: Relink `/lib/x86_64-linux-gnu/libsystemd.so.0' with `/lib/x86_64-linux-gnu/librt.so.1' for IFUNC symbol `clock_gettime'
python3: Relink `/lib/x86_64-linux-gnu/libudev.so.1' with `/lib/x86_64-linux-gnu/librt.so.1' for IFUNC symbol `clock_gettime'
Segmentation fault (core dumped)

我的 Ubuntu; 5.0.0-29-generic x86_64 GNU/Linux

从我克隆 OpenCV 的地方; https://github.com/opencv/opencv

相关话题;getting error while importing cv2 module in ubuntu amazon instanceConfigure AWS Redshift on Ubuntu 18.04 and use it with pyodbchttps://unix.stackexchange.com/questions/444697/cannot-run-python-file-asks-to-relink-librarieshttps://github.com/tensorflow/tensorflow/issues/19375

所提供的解决方案均无效,因为我的笔记本电脑上没有任何 NVidia 图形芯片

$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation HD Graphics 5500 (rev 09)

通知: 我需要从源代码编译 OpenCV,因为我想使用 SIFT 和 SURF detectors 和 descriptors 当 OpenCV 与 apt 一起安装时它们不再可用:

>>> import cv2
>>> cv2.__version__
'4.2.0'

>>> cv2.xfeatures2d.SIFT_create()    

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
cv2.error: OpenCV(4.2.0)     
/io/opencv_contrib/modules/xfeatures2d/src/sift.cpp:1210:    
error: (-213:The function/feature is not implemented)     
This algorithm is patented and is excluded in this configuration;    
Set OPENCV_ENABLE_NONFREE CMake option and rebuild the library in    
function 'create'

【问题讨论】:

哟..你有没有解决这个问题..我也有一个更棘手的问题。认为它与 GPU 驱动程序或配置有关。我不知道如何解决 我暂时没有修复它。如果我找到任何改进的方法,我会更新主帖。 如果您已经找到解决方案就好了。 【参考方案1】:

这似乎是由版本依赖问题引起的。 我遇到了同样的问题,运行以下命令 apt install python3-opencv

这样就可以解决问题了。

【讨论】:

我必须从源代码编译 opencv 才能使用 SIFT 和 SURF 关键点和描述符(+许多其他)运行测试,当 opencv 与 apt 一起安装时不再可用:请参阅 ***.com/questions/37039224/… 和***.com/questions/52305578/… 它没有解决我的问题,s.k. 发布的链接也没有。至于我的问题,它与user:~/$ jupyter qtconsole /home/linuxbrew/.linuxbrew/opt/python@3.8/bin/python3.8: Relink /usr/lib/x86_64-linux-gnu/libQtCore.so.4' 和/lib/x86_64-linux-gnu/librt.so.1' for IFUNC symbol clock_gettime' 分段错误(核心转储)有关`【参考方案2】:

在我的情况下,通过安装 OpenCV 标头 sudo apt install libopencv-dev 解决了该错误。通常我在尝试 pip 安装 OpenCV Python 绑定之前执行此 apt 安装

【讨论】:

它没有解决问题,因为我正在从源代码构建 opencv。 它也没有解决我的问题。至于我的问题,它与user:~/$ jupyter qtconsole /home/linuxbrew/.linuxbrew/opt/python@3.8/bin/python3.8: Relink /usr/lib/x86_64-linux-gnu/libQtCore.so.4' 和/lib/x86_64-linux-gnu/librt.so.1' for IFUNC symbol clock_gettime' 分段错误(核心转储)有关`【参考方案3】:

就我而言

python3.6: Relink `/lib/x86_64-linux-gnu/libsystemd.so.0' with `/lib/x86_64-linux-gnu/librt.so.1' for IFUNC symbol `clock_gettime'
python3.6: Relink `/lib/x86_64-linux-gnu/libudev.so.1' with `/lib/x86_64-linux-gnu/librt.so.1' for IFUNC symbol `clock_gettime'

生成
$ python3.6
import tvm

并通过安装缺少的库来解决。正如其他地方所建议的那样,我发现使用不同版本的 python 缺少了这一点。特别是我发现

$ python3.7
import tvm

报告(准确)丢失的库。一旦为 python3.6 安装了缺少的库

$ python3.6 -m pip install <missing_library>

问题消失了。

所以问题不是特定于 OpenCV 或 CuDNN。好像是python3.6报错的问题。

【讨论】:

也解决了我的问题。 python3.8 报告缺少 libnccl2 包。【参考方案4】:

我遇到了同样的问题。在我的情况下,问题与 CuDNN 有关。

Cuda: 10.2
CuDNN: tried both versions 7.6.5 and 8.0.1

当我从 github没有启用 CuDNN 编译 OpenCV 4.4.0 时,错误消失了。 换句话说,不要在编译 OpenCV 时包含这些 cmake 标志:

-D WITH_CUDNN=ON \
-D OPENCV_DNN_CUDA=ON \

如果您需要 CuDNN 支持,问题可能是安装后 CuDNN 未正确链接。 确保在安装 CuDNN 后运行以下命令

sudo ldconfig

OpenCV 编译结束后再次运行。

【讨论】:

以上是关于导入opencv时出现Python3重新链接问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Jetson Nano 上安装 OpenCV 4.1.2 时出现问题。导入 cv2,没有名为“cv2”的模块

使用 imshow + waitKey 显示图像 opencv+python 时出现问题

尝试导入 pybind opencv 模块时出现 libgtk 错误

在 Jupyter 笔记本上导入 openCV 时出现问题,即使它安装在我的机器上

使用某些 OpenCV 函数“阈值”Eclipse 时出现链接错误

在 Eclipse 上使用 opencv 3.0 时出现链接错误