opencv和tensorflow都使用libgtk时出现分段错误

opencv和tensorflow都使用libgtk时出现分段错误,tensorflow,gtk3,opencv3.0,Tensorflow,Gtk3,Opencv3.0,当OpenCV和tensorflow都使用libgtk时,就会出现分段错误。我在下面给出了一个创建问题的简单脚本、相关的硬件和软件版本以及堆栈跟踪。FWITW,三月份我在另一台机器上安装opencv、tensorflow、pandas等的相同版本时,工作正常。不确定到底发生了什么变化 如何制造问题 下面的脚本工作得很好。按预期捕获并显示帧 import cv2 cv2.namedWindow('frame') 但是,如果我在上面的任何地方添加一行“import pandas”或“import

当OpenCV和tensorflow都使用libgtk时,就会出现分段错误。我在下面给出了一个创建问题的简单脚本、相关的硬件和软件版本以及堆栈跟踪。FWITW,三月份我在另一台机器上安装opencv、tensorflow、pandas等的相同版本时,工作正常。不确定到底发生了什么变化

如何制造问题

下面的脚本工作得很好。按预期捕获并显示帧

import cv2
cv2.namedWindow('frame')
但是,如果我在上面的任何地方添加一行“import pandas”或“import tensorflow”,就会出现分段错误。例如

import tensorflow
import cv2
cv2.namedWindow('frame')
相关硬件和软件信息

硬件x86体系结构(英特尔I5内核) GPU GTX 1060 操作系统Linux Mint 18.2

Ubuntu内核版本4.8.0-53-generic#56~16.04.1-Ubuntu OpenCV版本3.4 Tensorflow版本1.4.1 熊猫版本0.20.1

CUDA 9.1 Nvidia驱动程序396.26

我尝试过的几件事 1.使用GTK2.4和GTK3编译OpenCV。同样的结果 2.更改NVIDIA驱动程序版本

我计划下一步尝试CUDA9.0,不过老实说,我不知道这和什么有什么关系

分段故障回溯 (gdb)英国电信

#0 0x000000000052b88c英寸??()
#PyErr_WarnEx()中的1 0x00000000005653ab
#2 0x00007fff840f7938英寸??()来自/usr/lib/python2.7/dist-packages/gobject//u gobject.x86\u 64-linux-gnu.so
#来自/lib/x86_64-linux-gnu/libglib-2.0.so.0的g_logv()中的3 0x00007fffd539e9a4
#来自/lib/x86_64-linux-gnu/libglib-2.0.so.0的g_日志()中的4 0x00007fffd539ebcf
#5 0x00007fffd5690d7d英寸??()来自/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#6 0x00007fffd569107b位于/usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0的g_类型_寄存器_static()中
#7 0x00007fffd5691695位于/usr/lib/x86\u 64-linux-gnu/libgobject-2.0.so.0中的g_类型_寄存器_static_simple()中
#8 0x00007fffd5e173a4位于/usr/lib/x86\u 64-linux-gnu/libgdk-3.so.0中的gdk_显示管理器_get_type()中
#9 0x00007fffd5e17409位于/usr/lib/x86\u 64-linux-gnu/libgdk-3.so.0中的gdk_显示管理器中
#10 0x00007fffd62fcc8b英寸??()来自/usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#11 0x00007fffd62d420b英寸??()来自/usr/lib/x86_64-linux-gnu/libgtk-3.so.0
#12 0x00007fffd53a2f67位于/lib/x86\u 64-linux-gnu/libglib-2.0.so.0中的g_选项上下文解析()中
#13/usr/lib/x86_64-linux-gnu/libgtk-3.so.0中的gtk_parse_args()中的0x00007fffd62d3fe8
#14 0x00007fffd62d4049位于/usr/lib/x86_64-linux-gnu/libgtk-3.so.0中的gtk_init_check()中
#15 0x00007fffd62d4099,位于/usr/lib/x86_64-linux-gnu/libgtk-3.so.0的gtk_init()中
#来自/usr/local/lib/libopencv_highgui.so.3.4的cvInitSystem()中的16 0x00007fffeef176c3
#17/usr/local/lib/libopencv_highgui.so.3.4中的cvNamedWindow()中的0x00007fffeef1a764
#来自/usr/local/lib/libopencv_highgui.so.3.4的cvShowImage()中的18 0x00007fffeef1aead
#来自/usr/local/lib/libopencv\u highgui.so.3.4的19 0x00007fffeef11349在cv::imshow(cv::String const&,cv:_inputarrayconst&)中
#20 0x00007FF67078D3,位于/usr/local/lib/python2.7/dist-packages/cv2.so的pyopencv_-cv_-imshow(_-object*,_-object*,_-object*,_-object*)中
#PyEval_EvalFrameEx()中的21 0x00000000004bc3fa
#PyEval_EvalFrameEx()中的22 0x00000000004c136f
#PyEval_EvalFrameEx()中的23 0x00000000004c136f
#PyEval_evalcodex()中的24 0x00000000004b9ab6
#25 0x00000000004eb30f英寸??()
#PyRun_FileExFlags()中的26 0x00000000004e5422
#PyRun_SimpleFileExFlags()中的27 0x00000000004e3cd6
#Py_干管中的28 0x0000000000493ae2()
#29 0x00007ffff7810830,在自立式启动主机中(主机=0x4934c0,argc=2,argv=0x7FFFFFE058,初始=,最终=,rtld\U最终=,
堆栈_end=0x7fffffffe048)位于../csu/libc start.c:291
#30 0x00000000004933e9英寸启动()

这里的基本问题是相同的流程使用了两个不同版本的gtk

我的OpenCV使用GTK3。 Python使用GTK2(在导入gtk中)。Tensorflow和pandas都在加工过程中的某个地方导入了gtk,因此它们确实存在相同的问题

目前,我已经通过使用gtk2重新编译opencv解决了这个问题。其他的选择是

  • 将python升级到gtk3。我环顾了一下这方面的可用资源,不相信它们足够可靠

  • 使用GTK3编译tensorflow和pandas(目前我刚刚导入了这两个的预编译库)。显然,这不是一个健壮的解决方案,因为其他一些包可能会使用内置的gtk,从而再次导致相同的问题


  • 进一步更新:我已经确定,真正的冲突只是与gtk。(Tensorflow和pandas恰好进口gtk)。基本上,我可以通过(import gtk,import cv2,cv2.namedWindow('name'))得到相同的分段错误
    #0 0x000000000052b88c in ?? ()
    #1 0x00000000005653ab in PyErr_WarnEx ()
    #2 0x00007fff840f7938 in ?? () from /usr/lib/python2.7/dist-packages/gobject/_gobject.x86_64-linux-gnu.so
    #3 0x00007fffd539e9a4 in g_logv () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #4 0x00007fffd539ebcf in g_log () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #5 0x00007fffd5690d7d in ?? () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
    #6 0x00007fffd569107b in g_type_register_static () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
    #7 0x00007fffd5691695 in g_type_register_static_simple () from /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
    #8 0x00007fffd5e173a4 in gdk_display_manager_get_type () from /usr/lib/x86_64-linux-gnu/libgdk-3.so.0
    #9 0x00007fffd5e17409 in gdk_display_manager_get () from /usr/lib/x86_64-linux-gnu/libgdk-3.so.0
    #10 0x00007fffd62fcc8b in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
    #11 0x00007fffd62d420b in ?? () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
    #12 0x00007fffd53a2f67 in g_option_context_parse () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
    #13 0x00007fffd62d3fe8 in gtk_parse_args () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
    #14 0x00007fffd62d4049 in gtk_init_check () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
    #15 0x00007fffd62d4099 in gtk_init () from /usr/lib/x86_64-linux-gnu/libgtk-3.so.0
    #16 0x00007fffeef176c3 in cvInitSystem () from /usr/local/lib/libopencv_highgui.so.3.4
    #17 0x00007fffeef1a764 in cvNamedWindow () from /usr/local/lib/libopencv_highgui.so.3.4
    #18 0x00007fffeef1aead in cvShowImage () from /usr/local/lib/libopencv_highgui.so.3.4
    #19 0x00007fffeef11349 in cv::imshow(cv::String const&, cv::_InputArray const&) () from /usr/local/lib/libopencv_highgui.so.3.4
    #20 0x00007ffff67078d3 in pyopencv_cv_imshow(_object*, _object*, _object*) () from /usr/local/lib/python2.7/dist-packages/cv2.so
    #21 0x00000000004bc3fa in PyEval_EvalFrameEx ()
    #22 0x00000000004c136f in PyEval_EvalFrameEx ()
    #23 0x00000000004c136f in PyEval_EvalFrameEx ()
    #24 0x00000000004b9ab6 in PyEval_EvalCodeEx ()
    #25 0x00000000004eb30f in ?? ()
    #26 0x00000000004e5422 in PyRun_FileExFlags ()
    #27 0x00000000004e3cd6 in PyRun_SimpleFileExFlags ()
    #28 0x0000000000493ae2 in Py_Main ()
    #29 0x00007ffff7810830 in __libc_start_main (main=0x4934c0 <main>, argc=2, argv=0x7fffffffe058, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, 
    stack_end=0x7fffffffe048) at ../csu/libc-start.c:291
    #30 0x00000000004933e9 in _start ()