Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ opencv错误:GTK+;2.检测到x个符号。使用GTK+;2.x和GTK+;不支持同一流程中的3_C++_Linux_G++_Opencv3.0 - Fatal编程技术网

C++ opencv错误:GTK+;2.检测到x个符号。使用GTK+;2.x和GTK+;不支持同一流程中的3

C++ opencv错误:GTK+;2.检测到x个符号。使用GTK+;2.x和GTK+;不支持同一流程中的3,c++,linux,g++,opencv3.0,C++,Linux,G++,Opencv3.0,编译并构建一个简单的opencv程序后,我在运行二进制文件时遇到了以下问题: Gtk错误**:检测到Gtk+2.x符号。在中使用GTK+2.x和GTK+3 不支持相同的进程 这些是运行pkg config pkg-config --libs gtk+-2.0 给我 -lgtk-x11-2.0-lgdk-x11-2.0-LPANGOCARO-1.0-latk-1.0-lcairo -lgdk_pixbuf-2.0-lgio-2.0-lpangoft2-1.0-lpango-1.0-lgobjec

编译并构建一个简单的opencv程序后,我在运行二进制文件时遇到了以下问题:

Gtk错误**:检测到Gtk+2.x符号。在中使用GTK+2.x和GTK+3 不支持相同的进程

这些是运行
pkg config

pkg-config --libs gtk+-2.0
给我

-lgtk-x11-2.0-lgdk-x11-2.0-LPANGOCARO-1.0-latk-1.0-lcairo -lgdk_pixbuf-2.0-lgio-2.0-lpangoft2-1.0-lpango-1.0-lgobject-2.0-lglib-2.0-lfontconfig-lfreetype

给我

-lgtk-3-lgdk-3-LPANGOCARO-1.0-lpango-1.0-latk-1.0-lcairo gobject-lcairo-lgdk_pixbuf-2.0-lgio-2.0-lgobject-2.0


可能您正在链接的某个库使用gtk 3.0。您是否已尝试跟踪每个LIB使用的版本?也许他们都在使用版本2,而你自己也在使用版本3。在链接或运行时是否会出现此错误?ldd将显示libs的运行时使用情况

例如,我想知道是我的代码使用了gtk库的版本3,还是我正在使用的某个库使用了gtk库的版本3

所以首先我要运行ldd来查看我的exe在运行时使用的libs

$ ldd /usr/bin/gkrellm | head
    linux-vdso.so.1 =>  (0x00007ffe57d03000)
    libgtk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0 (0x00007f5c88b55000)
    libgdk-x11-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so.0 (0x00007f5c888a0000)
    libgdk_pixbuf-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgdk_pixbuf-2.0.so.0 (0x00007f5c8867d000)
    libpango-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f5c88431000)
我已经用head截断了输出,但这里显示的exe是使用gtk版本2库的。但这是因为我的exe链接反对它,还是因为我正在使用的某个库使用它

让我们试试libpango lib

$ readelf -d /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 | grep library
0x0000000000000001 (NEEDED)             Shared library: [libgobject-2.0.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libthai.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
如果我重复这个过程,我会看到在这种情况下,libgtk没有被任何子序列lib使用,因此gkrelm本身的源调用了gtk lib


在您的情况下,我怀疑您的libs使用的是一个版本,但您的代码使用的是另一个版本。

我在运行时遇到此错误。Idd显示了
/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0:
/usr/lib/x86_64-linux-gnu/libgtk-3.so.0:
。我是linux新手,不知道这意味着什么。你能说得更具体些吗?谢谢大家!`我详细阐述了我的答案,以展示如何使用ldd和readelf查找EXE和LIB的主要和次要依赖项。
$ readelf -d /usr/lib/x86_64-linux-gnu/libpango-1.0.so.0 | grep library
0x0000000000000001 (NEEDED)             Shared library: [libgobject-2.0.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libglib-2.0.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libthai.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
0x0000000000000001 (NEEDED)             Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]