Il mio progetto consiste in un paio di librerie statiche, che sono collegate insieme in un passaggio finale. Ora ho il problema, che il link order of the library is important (altrimenti ottengo un errore del linker di un simbolo non definito). A volte mi imbatto nel problema, che devo riordinare le librerie collegate (-lcommon -lsetup -lcontrol etc). Al momento è una stupida prova ed errore: riordinare, compilare, controllare l'errore, riordinare, compilare e così via.Come determinare le dipendenze tra biblioteche?
Così ho scritto un piccolo programma per mostrarmi le interdipendenze tra le librerie e mi ha generato l'ordine delle librerie da collegare. Legge nei simboli definiti ('T', 'B', ecc.) E indefiniti ('U') da nm e rimuove lo weak symbols ('w', 'W', 'v' e 'V') dal ' elenco di simboli non definiti '. Ora determina per ogni simbolo indefinito la libreria che lo risolve.
Ma il mio programma mostra dipendenze circolari ... qual è il mio errore?
Se esistono davvero, non potrei collegarmi affatto ... quindi cosa mi è mancato, analizzando l'uscita nm? O sta analizzando l'output nm non nel modo, per ottenere queste dipendenze?
libcommon.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
libhardware.a:
00000484 T _ZN15HardwareUnit23GetHardwareSerialNumberEv
libsecurityaccess.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
---
libhardware.a:
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
libsecurityaccess.a:
00004020 T _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
C'è un modo per determinare quali "dipendenze circolari" interromperanno la compilazione e quali no? – Charly
Il linker ti dice i nomi dei simboli che non è riuscito a risolvere. –
Sì, questo è il modo in cui lo sto facendo ora (quando non si utilizza l'opzione 'gruppo' - che funziona alla grande, THX !!). Compilo, riordina la lista della biblioteca e corro nel successivo errore del linker. Se sarei in grado di calcolare anticipatamente le dipendenze, creerò l'ordine della libreria prima della compilazione e non dovrò farlo tramite tentativi ed errori. (Al momento ci sono circa 20 librerie e ognuna ha dipendenze da altri moduli) – Charly