opencv error: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
opencv error: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
编译构建了一个简单的opencv程序后,我运行二进制文件时遇到了这个问题:
Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in
the same process is not supported
这些是 运行 pkg-config
的结果
pkg-config --libs gtk+-2.0
给我
-lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-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
pkg-config --libs gtk+-3.0
给我
-lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
可能您要链接的库之一使用 gtk 3.0。您是否尝试追踪每个库使用的是哪个版本?也许他们都在使用版本 2 而您自己使用的是版本 3。您在链接或 运行ning 时是否遇到此错误? ldd 将显示 运行 库的使用时间。
例如,我想知道是我的代码使用了 gtk 库的第 3 版,还是我正在使用的库之一使用了 gtk 库的第 3 版。
所以我首先要 运行 ldd 查看我的 exe 在 运行 时使用了哪些库。
$ 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 库。
$ 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 没有被任何后续库使用,因此 gkrellm 本身的源代码调用了 gtk 库。
在你的情况下,我怀疑你有使用一个版本的库,但你的代码使用的是不同的版本。
编译构建了一个简单的opencv程序后,我运行二进制文件时遇到了这个问题:
Gtk-ERROR **: GTK+ 2.x symbols detected. Using GTK+ 2.x and GTK+ 3 in the same process is not supported
这些是 运行 pkg-config
pkg-config --libs gtk+-2.0
给我
-lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-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
pkg-config --libs gtk+-3.0
给我
-lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0
可能您要链接的库之一使用 gtk 3.0。您是否尝试追踪每个库使用的是哪个版本?也许他们都在使用版本 2 而您自己使用的是版本 3。您在链接或 运行ning 时是否遇到此错误? ldd 将显示 运行 库的使用时间。
例如,我想知道是我的代码使用了 gtk 库的第 3 版,还是我正在使用的库之一使用了 gtk 库的第 3 版。
所以我首先要 运行 ldd 查看我的 exe 在 运行 时使用了哪些库。
$ 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 库。
$ 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 没有被任何后续库使用,因此 gkrellm 本身的源代码调用了 gtk 库。
在你的情况下,我怀疑你有使用一个版本的库,但你的代码使用的是不同的版本。