Ho circa 50 diverse librerie statiche collegate al mio progetto C++ e il collegamento richiede in media 70 secondi.Come determinare l'ordine di collegamento più veloce?
Ho scoperto che spostarsi con l'ordine di collegamento delle librerie cambia questa volta. Questo è previsto, suppongo che se il linker non debba continuare a cercare una serie di simboli lungo l'intera tabella dei simboli che ha costruito fino a quel punto.
Suppongo che potrei usare "nm" per ottenere un grafico di dipendenza tra le librerie statiche. Tuttavia, questo mi darebbe solo un ordine di link "corretto". Quali sarebbero i fattori coinvolti nell'ottenere l'ordine di collegamento più veloce?
Ho la sensazione che avrebbe avuto qualcosa a che fare con il grafico delle dipendenze sopra menzionato ottenendo un attraversamento che avrebbe cercato di minimizzare una certa quantità ma non sono davvero sicuro di quale.
Qualsiasi aiuto sarebbe apprezzato.
Principalmente uso il compilatore intel e anche il compilatore gcc di tanto in tanto. Entrambi sembrano usare il linker GNU ld quando lo controllo con top. Spero che questo aiuti ...
Quindi, per chiarire un po 'di più su quello che sto cercando di chiedere, so già come ottenere un ordinamento a 1 passaggio da un set di librerie statiche. Avevo scritto questo script da solo ma come suggerisce la risposta di Olaf qui sotto, ci sono strumenti ben noti per farlo.
La mia domanda è, ho già due ordini di collegamento a 1 passaggio uno dei quali viene eseguito in ~ 85s e l'altro viene eseguito in ~ 70s. Quindi, chiaramente, c'è ancora un po 'di ottimizzazione che possiamo fare con gli ordini in un solo passaggio.
Probabilmente la lista di simboli/simboli non risolti, ma è più una sensazione che una conoscenza. Sidenote: tu ** devi ** indicare il linker a cui sei interessato, poiché i diversi linker hanno un comportamento completamente diverso (ibm itera più volte nell'elenco delle librerie fino a quando non risolve tutto o c'è progresso, ad esempio) –
Ho fatto lo stato Sto usando la suite del compilatore intel in modo che possa essere ld (almeno sembra che stia eseguendo ld quando controllo con top). Ora lavoro anche con la suite di compilatori gcc, quindi anche ld. – owagh
Una semplice idea: scrivi uno script per permutare tutti gli ordini possibili delle librerie e misurare il tempo di collegamento in modo programmatico. –