Ho un progetto che produce una libreria condivisa che è collegata a un'altra libreria, anch'essa condivisa.Modifiche introdotte in gcc 4.5 rispetto al collegamento?
Quando compilo e collegarlo con gcc 4.4, tutto funziona:
- non in fase di compilazione di avvertimento o di errore,
- tempo linking avvertimento o di errore e
ldd libmyproject.so
segnala correttamente la dipendenza con l'altra libreria condivisa.
Quando compilo e collegarlo con gcc 4.5, d'altra parte (con le stesse bandiere), ho i seguenti sintomi:
- alcun avviso di compilazione o di un errore,
- nessun collegamento avvertimento tempo o errore ma
- la libreria non è correttamente legato contro l'altro lib comune: questo si manifesta quando ho eseguito
ldd
e non vedo la connessione, e anche quando cerco di usarlo: mentre funziona con gcc 4.4, si blocca es a run-time con gcc 4.5 con un errore "symbol not found" (ovviamente dall'altra lib).
ho guardato il release notes e la mia intuizione è che ha qualcosa a che fare con la nuova ottimizzazione link-tempo, ma non riuscivo a capire in dettagli sufficienti.
Qualcuno ha riscontrato una situazione simile e/o ha qualche consiglio da offrire?
(notare che i risultati con 4.6 sono identici a 4.5).
Quali sono i tuoi flag di collegamento? Riesci a riprodurre il problema con un programma minimale (main.c, lib1.c, lib2.c, una singola funzione a linea singola)? –
Sfortunatamente per me, non riesco a riprodurlo con un programma minimale. Non ci sono flag di collegamento tranne per l'attesa -L e -l richiesti per trovare l'altra libreria. Dovrei anche notare che non ho scritto l'altra libreria e non so come è stata compilata (ma posso vedere tutti i simboli come previsto usando 'nm'). – Philippe
Mi sembra un bug di gcc ... – lvella