C++ opencv错误:GTK+;2.检测到x个符号。使用GTK+;2.x和GTK+;不支持同一流程中的3
编译并构建一个简单的opencv程序后,我在运行二进制文件时遇到了以下问题: Gtk错误**:检测到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
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]