我想在Linux上構建一個小型Qt(C++)GUI應用程序,但無法構建大量鏈接程序錯誤,抱怨我鏈接的Qt庫缺少依賴關係。我在Qt庫上使用ldd來驗證這些庫確實存在 - 它們是。如何自動鏈接到共享庫的依賴關係
我的問題似乎在這個線程進行相關的討論: Linking dependencies of a shared library 雖然該線程幫我找出我的問題準確,似乎該線程的結論是,我的應用程序應該鏈接!
應用程序被編譯使用下面的命令:
g++ -m64 -Wl,-O1 -o Executable some-object.o some-other-object.o -lQtCore -lQtGui -lQtXml -L/usr/lib64 -L/usr/X11R6/lib64 -lpthread
運行該產生以下形式的警告,和鏈接最終失敗與未定義的參考誤差(在「缺失」庫中定義的符號):
.../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 Distro(openSuse 12.2),沒有任何問題。所有庫,包括Qt,都是從發行版安裝的。
我認爲這可能是我的openSuse安裝的某種設置問題,但我不知道從哪裏開始尋找解決這個問題。
歡呼聲中,克雷格
我同意,它應該只是您無需添加所有的依賴庫工作。我懷疑某種系統配置有誤。也許重新安裝工具鏈的各個部分,比如編譯器和binutils,可能有助於......? –
使用Yast我刪除binutils,然後重新安裝gcc工具,現在它工作。感謝您的回覆。 –