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つのバージョンを使用するライブラリがあると思われますが、あなたのコードは別のバージョンを使用しています。
実行中にこのエラーが発生しました。 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を使って、exesとlibsの第一次と第二次の依存関係を見つける方法を説明しました。 – netskink