Próbuję zbudować małą aplikację GUI Qt (C++) na Linuksie, ale nie kompiluje się z licznymi błędami linkera, narzekając na brakujące zależności dla biblioteki Qt, z którą łączę. Użyłem ldd na bibliotekach Qt, aby sprawdzić, czy biblioteki rzeczywiście istnieją - i są.Jak automatycznie łączyć się z zależnościami biblioteki współdzielonej
Mój problem wydaje się być związany z dyskusji w tym wątku: Linking dependencies of a shared library I choć ten wątek pomógł mi zidentyfikować moją dokładną problemu, wydaje się, że zawarcie tego wątku było to, że moja aplikacja powinna połączyć!
Aplikacja jest przygotowana z następujących poleceń:
g++ -m64 -Wl,-O1 -o Executable some-object.o some-other-object.o -lQtCore -lQtGui -lQtXml -L/usr/lib64 -L/usr/X11R6/lib64 -lpthread
Działanie tego generuje ostrzeżenia o następującej formie, a linkami ostatecznie nie z niezdefiniowanych błędów odniesienia (symboli zdefiniowanych w „brakujących” bibliotek)
.../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)
i tak dalej (w sumie jest 18 zależności, które nie mogły zostać znalezione.)
mogę tego skompilować gdybym idź i jawnie dodaj -lglib, -lpng14, -lz -lfreetype i tak dalej, ale jak już wspomniałem, istnieje 18 zależności - i wolałbym tego nie robić. Wydaje się również, że nie powinienem tego robić.
Mam skompilowany ten sam projekt na moim laptopie, który używa dokładnie tego samego Linux Distro (openSuse 12.2) bez żadnych problemów. Wszystkie biblioteki, w tym Qt, zostały zainstalowane z repozytoriów.
Myślę, że to może być jakiś problem z instalacją na mojej instalacji openSuse, ale nie mam pojęcia, od czego zacząć to naprawić.
Cheers, Craig
Zgadzam się, że powinien on działać bez konieczności dodać wszystkie biblioteki zależne. Podejrzewam coś w rodzaju błędnej konfiguracji systemu. Być może ponowne zainstalowanie części toolchain, takich jak kompilator i binutils, może pomóc ...? –
Używając Yast usunąłem binutils, a następnie ponownie zainstalowałem narzędzia gcc i teraz to działa. Dzięki za odpowiedź. –