Sto provando a costruire una piccola applicazione QI (C++) su Linux ma non riesce a costruire con numerosi errori del linker, lamentando le dipendenze mancanti per la libreria Qt con cui sto collegandomi. Ho usato ldd sulle librerie Qt per verificare che le librerie ci siano davvero - e lo sono.Come collegarsi automaticamente alle dipendenze della libreria condivisa
Il mio problema sembra essere correlato alla discussione in questa discussione: Linking dependencies of a shared library E mentre quel filo mi ha aiutato a identificare il mio problema preciso, sembra che la conclusione di quel filo era che la mia domanda dovrebbe collegare!
L'applicazione viene compilata con il seguente comando:
g++ -m64 -Wl,-O1 -o Executable some-object.o some-other-object.o -lQtCore -lQtGui -lQtXml -L/usr/lib64 -L/usr/X11R6/lib64 -lpthread
L'esecuzione di questo genera avvertimenti del seguente modulo, e il collegamento alla fine non riesce con errori di riferimento non definiti (a simboli definiti nelle librerie 'mancanti'):
.../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)
e così via (in totale ci sono 18 dipendenze, che non è stata trovata.)
posso ottenere questo per compilare se io vai e aggiungi esplicitamente -lglib, -lpng14, -lz -lfreetype e così via, ma come ho detto ci sono 18 dipendenze - e preferirei non farlo. Sembra anche che non dovrei farlo.
Ho compilato lo stesso progetto sul mio computer portatile che utilizza lo stesso identico Linux Distro (openSuse 12.2) senza problemi. Tutte le librerie, inclusa Qt, sono state installate dai repository di distro.
Penso che questa potrebbe essere una sorta di problema di installazione sulla mia installazione di openSUSE, ma non ho idea di dove iniziare a cercare di risolvere questo problema.
Cheers, Craig
Sono d'accordo che dovrebbe funzionare senza dover aggiungere tutte le librerie dipendenti. Sospetto una errata configurazione del sistema di qualche tipo. Forse reinstallare pezzi della toolchain, come il compilatore e le binutils, potrebbe aiutare ...? –
Uso di Yast Ho rimosso i binutils, quindi ho reinstallato gli strumenti di gcc e ora funziona. Grazie per la tua risposta. –