Probabilmente una risposta semplice; Sono abbastanza confuso con il linguaggio usato nella documentazione GCC per alcune di queste bandiere!Quando utilizzare determinate ottimizzazioni come -fwhole-program e -fprofile-generate con diverse librerie condivise
In ogni caso, ho tre librerie e un programma che utilizza tutti questi tre. Compilare ciascuna delle mie librerie separatamente con singoli (potenzialmente) diversi gruppi di flag di avviso. Tuttavia, compongo tutte e tre le librerie con lo stesso set di flag di ottimizzazione.
Compilare quindi il mio programma principale che collega in queste tre librerie con il proprio set di flag di avviso e gli stessi flag di ottimizzazione utilizzati durante la compilazione delle librerie.
1) Devo compilare le librerie con i flag di ottimizzazione presenti o posso semplicemente usare questi flag quando compilo il programma finale e il collegamento alle librerie? Se quest'ultimo, ottimizzerà tutto o solo alcuni (presumibilmente ciò che viene chiamato) del codice in queste librerie?
2) Vorrei utilizzare -fwhole-program -flto -fuse-linker-plugin e il plug-in del linker gold. In quale fase compilo con questi su ... solo la compilazione finale o questi flag devono essere presenti durante la compilazione delle librerie?
3) Praticamente uguale a 2) tuttavia con -fprofile-generate -fprofile-arcs e -fprofile-use. Capisco che prima si esegue un programma con generare, e quindi con l'uso. Tuttavia, devo compilare ciascuna delle librerie con generare/utilizzare ecc. O solo il programma finale? E se è solo l'ultimo programma, quando poi compilo con -fprofile-use ottimizzerà anche la funzionalità delle librerie?
In aggiunta a ciò, notare che -flto non interagisce con le librerie condivise a cui si sta collegando Si potrebbe eseguire l'ottimizzazione del tempo di collegamento quando si costruisce la stessa libreria condivisa in modo che possa beneficiare di flto quando viene creata, ma il proprio eseguibile i collegamenti a tale libreria condivisa non possono eseguire l'ottimizzazione del tempo di collegamento attraverso l'eseguibile e le librerie condivise a cui si collega. (Ma puoi farlo con le librerie statiche) – nos