5

I am trying to build a small Qt (C++) GUI application on Linux but it fails to build with numerous linker errors, complaining about missing dependencies for the Qt library I am linking against. I used ldd on the Qt libraries to verify that the libraries are indeed there - and they are.

My problem seems to be related to the discussion in this thread: Linking dependencies of a shared library And while that thread helped me identify my precise problem, it seems that the conclusion of that thread was that my application should link!

The application is compiled with the following command:

g++ -m64 -Wl,-O1 -o Executable some-object.o some-other-object.o -lQtCore -lQtGui -lQtXml -L/usr/lib64 -L/usr/X11R6/lib64 -lpthread

Running this generates warnings of the following form, and linking eventually fails with undefined reference errors (to symbols defined in the 'missing' libraries):

.../ld: warning: libglib-2.0.so.0, needed by /usr/lib64/libQtGui.so, not found (try using -rpath or -rpath-link)
.../ld: warning: libpng14.so.14, needed by /usr/lib64/libQtGui.so, not found (try using -rpath or -rpath-link)
.../ld: warning: libz.so.1, needed by /usr/lib64/libQtGui.so, not found (try using -rpath or -rpath-link)
.../ld: warning: libfreetype.so.6, needed by /usr/lib64/libQtGui.so, not found (try using -rpath or -rpath-link)

など (全部で 18 個の依存関係が見つかりませんでした。)

-lglib、-lpng14、-lz -lfreetype などを明示的に追加すると、これをコンパイルできますが、前述したように、18 の依存関係があります。しなくてもいいようにも思えます。

まったく同じ Linux ディストリビューション (openSuse 12.2) を問題なく使用するラップトップ コンピューターで同じプロジェクトをコンパイルしました。Qt を含むすべてのライブラリは、ディストリビューション リポジトリからインストールされました。

これは、私の openSuse のインストールで何らかの設定上の問題が発生した可能性があると思いますが、これを修正するためにどこから始めればよいかわかりません。

乾杯、クレイグ

4

1 に答える 1

1

/usr/lib64/libQtGui.so依存する共有ライブラリを見つけるためにハードコーディングされた rpath が含まれているようです。ホストの 1 つで必要なライブラリが期待される場所にあるのに対し、他のホストではそうではありません。

elfdump のようなものを使用しRPATHて QT 共有ライブラリを取得し、それがどこにあるかを調べることができます。-R次に、リンクコマンドラインで(私が信じている)を使用して、そのホストでライブラリが実際にインストールされている場所を指すことができます。

編集:次のようなことができると思いますobjdump -x <binary/library> | grep -i rpath

于 2012-11-12T17:53:31.443 に答える