Im usando Qmake per costruire una libreria condivisa su Ubuntu 9.10problemi ld di collegamento:/usr/bin/ld: non riesce a trovare [libraryname]
Questa libreria condivisa (A) ha una dipendenza su un'altra libreria condivisa (B) .
il progetto B è stato realizzato con successo.
nel file .pro per il progetto A, la mia variabile LIBS si presenta così:
LIBS += -L../datelib/bin -llibdatelib_release.so.1.0.0
(ho usato il nome completo shlib perché le versioni della libreria sono diverse.)
In ogni caso, quando tento di costruire il progetto a, si rompe in fase di collegamento, e stampa il messaggio di errore:
/usr/bin/ld: cannot find -llibdatelib_release.so.1.0.0
collect2: ld returned 1 exit status
make[1]: ***[bin/libprojecta_release.so.6.0.0] Error 1
make ***[release] Error 2
Exited with code 2
dal messaggio di errore, ho pensato ld si lamentava che non poteva l ocate il file libdatelib, quindi l'ho copiato manualmente in/usr/lib/
tuttavia, questo non ha risolto il problema e ricevo lo stesso messaggio di errore.
Qualcuno sa come risolvere questo problema?
[Edit]
Sono abbastanza nuovo a palazzo utilizzando gcc. So come creare collegamenti simbolici, ma quali percorsi devo usare per il comando lnk ?. Il file a cui voglio collegarmi è in/home/username/work/cppdev/datelib/bin.
Anche il sistema di compilazione che uso (qmake), crea automaticamente i collegamenti simbolici come parte della costruzione, così ho già i seguenti file nella mia/home/nomeutente/lavoro/cppdev cartella/datelib/bin:
- libdatelib_release.so (link MGS)
- libdatelib_release.so.1 (link MGS)
- libdatelib_release.so.1.0 (link MGS)
- libdatelib_release.so.1.0.0 (lib comune)
Potrei dover fare un'altra domanda per spiegare perché ci sono così tanti collegamenti simbolici (qual è il punto?), E perché non posso collegarmi direttamente a una lib condivisa, ma devo passare attraverso un collegamento simbolico. Ho letto alcuni documenti online, ma quello che ho visto finora sembra più una dictum/tradizione piuttosto che ragioni tecniche reali PERCHÉ questo livello di astrazione è richiesto durante il collegamento su Linux.
io non sono un esperto di costruzione e di collegamento sotto Linux e avuto spesso problemi simili ai tuoi. Tuttavia, ciò che faccio è raccomandare il seguente eccellente articolo su come trattare le librerie condivise su IBM DeveloperWorks: [** _ Dissecting librerie condivise - Scopri la tua libreria condivisa _ ** (di Peter Seebach)] [seebach]. La sezione _ "Modifica del percorso di ricerca del linker dinamico" _ potrebbe interessarti in particolare. [seebach]: http://www.ibm.com/developerworks/linux/library/l-shlibs.html – stakx