Quali sono le opzioni specifiche che avrei bisogno di creare in "modalità di rilascio" con ottimizzazioni complete in GCC? Se ci sono più opzioni, per favore elencale tutte. Grazie.Come creare in modalità di rilascio con ottimizzazioni in GCC?
risposta
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html
non c'è 'taglia unica' - è necessario comprendere la vostra applicazione, le vostre esigenze e le opzioni di ottimizzazione per determinare il sottoinsieme corretto per il binario.
O la risposta che si desidera: -O3
-O2 si accenderà tutte le ottimizzazioni che non richiedono un commercio spazio \ velocità off e tende ad essere quello che vedo usato più spesso. -O3 fa un po 'di spazio per gli scambi di velocità (come la funzione inline.) -Os fa O2 plus fa altre cose per ridurre le dimensioni del codice. Questo può rendere le cose più veloci di O3 migliorando l'uso della cache. (test per scoprire se funziona per voi.) Nota ci sono un gran numero di opzioni che nessuno degli interruttori O tocco. Il motivo per cui vengono lasciati fuori è perché dipende spesso dal tipo di codice che stai scrivendo o che dipende molto dall'architettura.
Nota che gcc non ha una "modalità di rilascio" e una "modalità di debug" come MSVC. Tutto il codice è solo codice. La presenza delle varie opzioni di ottimizzazione (-O2 e -Os sono le uniche di cui generalmente ci si deve preoccupare a meno che non si stia eseguendo una regolazione molto fine) modifica il codice generato, ma non in un modo per impedire l'interoperabilità con altri ABI-compliant codice. Generalmente vuoi l'ottimizzazione su cose che vuoi rilasciare.
La presenza dell'opzione "-g" causerà l'inserimento di informazioni estese su codice e codice sorgente nei file generati, utile per il debug ma che aumenta la dimensione del file (e rivela il codice sorgente), che è qualcosa che spesso non vuoi nei binari "rilasciati".
Ma non sono esclusivi. È possibile avere un file binario compilato con informazioni di ottimizzazione e debug o uno con nessuno dei due.
L'ottimizzazione dovrebbe essere disabilitata di solito se si intende eseguire il debug del codice generato, altrimenti il debug sarà un'esperienza simile a un film di David Lynch. – caf
Non è così male, guardo i dump dello stack e l'output di valgrind dai binari "release" tutto il tempo. Finché non si usa -fomit-stack-pointer e si capisce che le statiche potrebbero essere inline e invisibili, si può leggere un sacco di contesto anche da un binario fortemente ottimizzato. Se le tue funzioni sono brevi, di solito puoi capire l'espressione che si è schiantata con un'ipotesi o due. –
A differenza di un film di David Lynch, tuttavia, i debugger consentono allo spettatore di passare a piacere tra i diversi livelli di realtà. Se comprendi il disassemblaggio, il passaggio a passi singoli (con le linee di origine intersperse) di solito ha un certo senso anche con l'ottimizzazione. Se non capisci lo smontaggio, allora imparerai. –
Ecco una parte di un Makefile che uso regolarmente (in questo esempio, si sta tentando di creare un programma denominato pippo).
Se lo si esegue come $ make BUILD=debug
o $ make debug
allora verrà utilizzato il Debug CFLAGS. Questi disattivano l'ottimizzazione (-O0
) e includono i simboli di debug (-g
).
Se si omette questi flag (eseguendo $ make
senza parametri aggiuntivi), potrai costruire la versione di rilascio CFLAGS in cui l'ottimizzazione è attivata (-O2
), simboli di debug spogliati (-s
) e asserzioni disabilitate (-DNDEBUG
) .
Come altri hanno suggerito, è possibile sperimentare diverse impostazioni -O*
dipendenti dalle esigenze specifiche.
ifeq ($(BUILD),debug)
# "Debug" build - no optimization, and debugging symbols
CFLAGS += -O0 -g
else
# "Release" build - optimization, and no debug symbols
CFLAGS += -O2 -s -DNDEBUG
endif
all: foo
debug:
make "BUILD=debug"
foo: foo.o
# The rest of the makefile comes here...
- 1. Come disabilitare le ottimizzazioni tailcall in gcc
- 2. Come creare apk in modalità di rilascio usando Maven
- 3. con Console.SetOut in modalità di rilascio?
- 4. Trace.WriteLine in modalità di rilascio?
- 5. Scrivi su debug in modalità di rilascio
- 6. Debug.Assert genera IL in modalità di rilascio?
- 7. NLog non funziona in modalità di rilascio
- 8. Quali sono le costose ottimizzazioni di GCC?
- 9. Come abilitare la modalità c99 in gcc con terminale
- 10. Come eseguire il debug in modalità di rilascio?
- 11. Come creare versione vscode di rilascio
- 12. Errore log in modalità di rilascio in IIS7
- 13. Impossibile eseguire il debug dell'applicazione in modalità di rilascio anche con DebugType = completo
- 14. Blocco sveglia disattivato in foreground service con modalità Doze - nuove ottimizzazioni della batteria in Android M
- 15. Metodo spianato non utilizzato dal test in modalità di rilascio
- 16. comportamento sconosciuto con ottimizzazioni abilitato
- 17. Il comando Simple OpenCV funziona in modalità di debug ma non in modalità di rilascio
- 18. Come utilizzare Entity Framework in modalità Primo rilascio codice prima?
- 19. Google Maps non mostra su Android in modalità di rilascio
- 20. Crashlytics non segnala crash in modalità di rilascio
- 21. Punto di rottura nella modalità di rilascio
- 22. Rilascio Maven: versione di sviluppo successiva in modalità batch
- 23. Come creare un binario della versione di rilascio in Go?
- 24. Accedere a StackTrace durante la distribuzione in modalità di rilascio
- 25. Xamarin Android: System.IO.Compression.ZipFile.ExtractToDirectory Errore in modalità di rilascio
- 26. Modalità di rilascio vs Debug = "false"
- 27. Dizionario rapido lento anche con le ottimizzazioni: esecuzione di mantenimento/rilascio non appropriato?
- 28. Utilizzo della modalità C++ 0x di GCC in produzione?
- 29. Quali pass LLVM sono responsabili delle ottimizzazioni in virgola mobile?
- 30. La modalità di rilascio dipende ancora da MSVCP110D.dll (C++ MSVS)
Ho fatto e non ho potuto trovare una spiegazione diretta. Potrei solo succhiare alla ricerca però. – Polaris878
Inoltre, il punto di SO è quello di apparire nei motori di ricerca come Google, quindi è meglio averlo qui comunque. – Polaris878
Chiama. E 'questo quello che cercavi? O hai bisogno di un po 'più di contesto/informazioni? – Josh