Almeno su Linux e Solaris, le librerie statiche sono in realtà solo un mucchio di .o compilato in un unico grande file. Quando si compila una libreria statica, in genere il flag -fpic è ommited, quindi il codice generato dipende dalla posizione.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?
Ora dire che la mia libreria statica è B. L'ho creata e ho il file .a risultante che è in realtà solo un glob di tutti i file .o dipendenti dalla posizione. Ora ho una libreria condivisa che vorrei costruire, A, e voglio che leghi staticamente B. Quando costruisco A, naturalmente userò il flag -fpic per rendere indipendente la posizione del codice generato. Ma se collego B, non sto mixando la posizione dipendente e posiziono i file oggetto indipendenti?
Ho un sacco di errori di trasferimento del testo a meno che non specifichi anche -mimpure-text, e penso che questa sia la causa. Sembra che quando compilo una libreria, ho davvero bisogno di compilarlo volte, una versione condivisa, una versione statica e una versione statica-che-può-essere-usata-per-condivisa-libs. Ho ragione? Potrei continuare a usare -mimpure-text ma la pagina man di g ++ dice che se lo fai l'oggetto non finisce per essere condiviso (non è chiaro se sia tutto condiviso o solo le parti collegate staticamente, qualcuno lo sa?) .
La domanda si afferma in modo corretto, si '-fpic' 'omette' nel primo paragrafo, che porta al codice dipendente dalla posizione, poi lo usa nel secondo paragrafo, che porta a codice indipendente dalla posizione. –