Supponiamo che tu abbia 2 librerie condivise, lib1.so e lib2.so, che hanno entrambi libcommon.a linkato staticamente in esse. Il compilatore si lamenterebbe di un riferimento ambiguo ai simboli se si collegasse dinamicamente sia a lib1.so sia a lib2.so? O il compilatore dovrebbe essere abbastanza intelligente da sapere che i simboli libcommon sono condivisi tra lib1 e lib2 e consentono di collegarsi dinamicamente a entrambi?Collegamento a più librerie condivise che sono tutte collegate a una libreria statica comune
risposta
La libreria statica verrebbe utilizzata per risolvere internamente i collegamenti ma il collegamento esterno non verrebbe propagato all'interfaccia della libreria condivisa, quindi non ci sarebbero conflitti. Ogni libreria condivisa includerebbe la propria copia del codice della libreria statica.
Non ci sarà alcun conflitto perché quando si collega alle librerie condivise, il linker utilizzerà la definizione dalla prima libreria condivisa che fornisce il simbolo e non guarderà oltre le altre librerie condivise. I simboli inclusi da .a verranno esportati in entrambe le librerie condivise ma non entreranno in conflitto.
Questo non è vero. Ci sono simboli esportati deboli e forti. Se c'è disambiglianza tra forte c'è un errore. – Trismegistos
Supponiamo che le due librerie condivise siano collegate con le diverse librerie statiche. Ma le librerie statiche contengono entrambe una funzione con lo stesso nome. Ci sarebbe conflitto.
Sono sicuro che perché ho un'applicazione tcl/tk, carica due librerie tcl (.so). Entrambe le librerie sono collegate staticamente con la libreria openssl. ma con una versione diversa. Si è verificato un errore di segmentazione durante l'esecuzione dell'applicazione tcl. Lo rintraccio nel openssl. C'è una implementazione della funzione modificata nella nuova versione.
- 1. Come sono collegate le variabili globali nelle librerie condivise?
- 2. Un collegamento a una libreria statica C++ alla libreria condivisa?
- 3. collegamento a una libreria 0MQ statica in VS
- 4. Impedire che le funzioni vengano eliminate da una libreria statica quando collegate in una libreria condivisa?
- 5. Creazione di librerie C++ sia statiche che condivise
- 6. Collegamento di una libreria condivisa a una libreria statica: la libreria statica deve essere compilata in modo diverso rispetto a quando un'applicazione lo stava collegando?
- 7. È possibile collegare una libreria statica a Java tramite JNI?
- 8. linux g ++ collegamento di codice libreria condivisa a 64 bit a librerie statiche
- 9. Miscelazione di librerie statiche e librerie condivise
- 10. Collegamento binario con libreria statica in xcconfig
- 11. Makefile per librerie condivise?
- 12. Automake e librerie condivise standard
- 13. linker g ++: forza il collegamento statico se esiste una libreria statica?
- 14. Collega una libreria statica a una condivisa durante la compilazione?
- 15. collegamento con libreria statica rispetto a singoli file oggetto
- 16. Librerie condivise opzionali
- 17. Una libreria statica XCode può richiedere il collegamento con una libreria dinamica?
- 18. Collegamento delle dipendenze di una libreria condivisa
- 19. Quali librerie di autenticazione per PHP non sono collegate a un framework e soddisfano questi requisiti?
- 20. percorsi relativi per librerie condivise
- 21. Differenza tra moduli e librerie condivise?
- 22. Comportamento di variabili statiche in librerie collegate dinamicamente (C/C++)
- 23. Librerie condivise Linux C++
- 24. Aggiungi libreria statica a podspec
- 25. collegamento a più librerie, una delle quali si avvolge una serie di chiamate di sistema
- 26. Perché le estensioni Python sono condivise con le librerie? È possibile creare una libreria collegata staticamente?
- 27. Stripping librerie condivise di linux
- 28. È una variabile membro statica comune a tutte le istanze generiche C#?
- 29. Cosa succede alle variabili statiche quando le librerie sono collegate staticamente
- 30. Come impedire a CMake di creare un collegamento simbolico per le librerie condivise al momento dell'installazione?
Almeno in GNU/Linux, se creo una libreria condivisa (.so) che si collega a una libreria statica (.a), posso accedere a tutti i simboli estratti dalla libreria statica da un eseguibile che collega solo alla libreria condivisa (.so), quindi sono abbastanza sicuro che i simboli della libreria statica _are_ si siano propagati all'interfaccia della libreria condivisa. Forse le cose funzionano diversamente su altri sistemi, ma la maggior parte dei sistemi su cui ho lavorato è il caso con le opzioni predefinite del linker. –
@ Jay Walker: Per quello che vale, ho preferito la tua risposta. Indipendentemente dai meccanismi, la verità fondamentale è che non si verificheranno conflitti. – Clifford