Suppongo che per "software di produzione" si intenda il software spedito ai clienti/in produzione. Le risposte a Why not always use compiler optimization? (gentilmente indicate da Mankarse) si applicano principalmente alle situazioni in cui si desidera eseguire il debug del codice (quindi il software è ancora in fase di sviluppo, non in produzione).
L'unica buona ragione valida che posso pensare è che l'ottimizzazione del tempo di collegamento può introdurre bug sottili, vedere Link-time optimization for the kernel. Supponendo di disporre di test appropriati per verificare la correttezza del software che si sta per spedire, non vedo alcun motivo per non utilizzare LTO di default. (LTO sta diventando più maturo con il tempo, quindi speriamo che quei piccoli bug diventeranno sempre meno frequenti.)
Vedere [Perché non utilizzare sempre l'ottimizzazione del compilatore?] (Http://stackoverflow.com/q/7857601/485561). Le risposte qui sono ugualmente applicabili. – Mankarse
AFAIK, lto per gcc rende il tuo eseguibile più grande e incompatibile con ld, ld è in grado di gestire il tuo oggetto compilato perché esiste effettivamente un plugin per ld dal progetto gcc, ma questo tipo di ottimizzazioni è "non standard" secondo il linker punto di vista. questa idea generale su un oggetto compilato che non è confezionato come gli altri che sono "standard" può portare a tutti i tipi di problemi. – user2485710
@Mankarse Chiede * "durante la compilazione del software di produzione" * così la maggior parte delle risposte non è applicabile. – Ali