L'unico utilizzo reale dell'opzione di collegamento --whole-archive
che ho visto è la creazione di librerie condivise da quelle statiche. Recentemente mi sono imbattuto in Makefile (s) che usa sempre questa opzione quando si collegano con le librerie statiche interne. Ciò, naturalmente, fa sì che gli eseguibili eseguano inutilmente il codice oggetto senza riferimento. La mia reazione è stata che questo è assolutamente sbagliato, mi manca qualcosa qui?ld domanda linker: l'opzione --whole-archive
La seconda domanda che ho ha a che fare con qualcosa che ho letto sull'opzione dell'intero archivio ma che non ho potuto analizzare. Qualcosa nell'effetto che l'opzione --whole-archive
debba essere usata durante il collegamento con una libreria statica se l'eseguibile si collega anche con una libreria condivisa che a sua volta ha (in parte) lo stesso codice oggetto della libreria statica. Questa è la libreria condivisa e la libreria statica si sovrappone in termini di codice oggetto. L'utilizzo di questa opzione costringerebbe tutti i simboli (indipendentemente dall'uso) a essere risolti nell'eseguibile. Questo dovrebbe evitare la duplicazione del codice oggetto. Ciò è fonte di confusione, se un simbolo è referenziato nel programma deve essere risolto in modo univoco al momento del collegamento, qual è il business della duplicazione? (Perdonami se questo paragrafo non è del tutto l'epitome di chiarezza)
Grazie
Russion Se libhttp.a può essere costruita, dimostra che la funzione register_handler esisteva in quella libhttp.a. Quindi, come può questa funzione riferirsi a register_handler in main.cc? Quindi, in questo caso, dobbiamo usare un altro modo per attuare la tua idea. – longbkit