2017-03-01 54 views
0

がサポートされていない、私はバイナリファイル走ったとき、私はこの問題が発生しました:opencvエラー:GTK + 2.xシンボルが検出されました。同じプロセスでGTK + 2.xとGTK + 3を使用してコンパイルすると、単純な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 
を与えます

は、あなたが3.0をGTKの使用とリンクしている私にあなたのライブラリの可能性

-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

答えて

1

1を与えます。あなたは、これらのライブラリのそれぞれが使用しているバージョンのどれかを追跡しようとしましたか?おそらく彼らはすべてバージョン2を使用しており、あなた自身はバージョン3を使用しています。リンクしているときや実行しているときにこのエラーが出ますか? lddはlibsの実行時の使用状況を表示します。

例として、gtkライブラリのバージョン3または使用しているライブラリの1つであるgtkライブラリのバージョン3を使用しているかどうかを知りたいと思います。

まず最初に、実行時に使用するlibsを確認するためにlddを実行します。

$ 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) 

私は頭を使って出力を切り捨ててきたが、ここではそのは、exeファイルを示すには、GTKバージョン2のlibを使用しています。しかし、それは私のexeがそれに対してリンクしているか、または私が使っているライブラリの1つがそれを使用しているからですか?

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がsubsquent LIBSのいずれかによって使用されていないので、GTK libには、gkrellmの自身のソースによってで呼ばれていることがわかります。

あなたのケースでは、1つのバージョンを使用するライブラリがあると思われますが、あなたのコードは別のバージョンを使用しています。

+0

実行中にこのエラーが発生しました。 Iddは私に '/usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so.0:'と '/usr/lib/x86_64-linux-gnu/libgtk-3.so.0:'の両方を表示します。私はLinuxには新しく、これが何を意味するのか分からない。あなたはもっと具体的になりますか?ありがとうございました! ' –

+0

私は、lddとreadelfを使って、exesとlibsの第一次と第二次の依存関係を見つける方法を説明しました。 – netskink

関連する問題