Domanda

Rice per scrivere un C ++ per estensione una gemma Ruby. L'estensione è sotto forma di un file oggetto condiviso (.so).

Ciò richiede 'mkmf riso' invece di 'mkmf', ma i due (per quanto ne so) sono piuttosto simili.

Per impostazione predefinita, il compilatore utilizza il -g -O2 bandiere. Personalmente, trovo questo tipo di sciocco, dal momento che è difficile da debug con alcuna ottimizzazione abilitato. Ho fatto ricorso a modificare il Makefile di togliere le bandiere non mi piace (per esempio, la rimozione di -fPIC -shared quando ho bisogno di eseguire il debug utilizzando main() invece di ganci di Ruby).

Ma io figura ci deve essere un modo migliore. So che posso solo fare

$CPPFLAGS += " -DRICE"

per aggiungere flag addizionali. Ma come faccio a rimuovere le cose senza modificare direttamente il Makefile?

Una questione secondaria: che cosa le ottimizzazioni sono sicuri per gli oggetti condivisi caricati da Ruby? Posso fare le cose come -funroll-loops? Che cosa tutto consigliate?

E 'un progetto di calcolo scientifico, in modo più veloce è il migliore. La memoria non è un gran problema.

Molte grazie!

È stato utile?

Soluzione

Il modo più rapido e sporco è quello di accodare -O0 a CXXFLAGS, che si spegne di ottimizzazione. Più tardi opzioni sostituiranno quelle precedenti.

Per quanto riguarda la sicurezza per un plugin, si dovrebbe essere in grado di fare nulla che non pregiudica l'ABI. Senza prove, non vedo il motivo per cui -funroll sarebbe. Naturalmente, cassetta di sicurezza non implica meglio. Come ha rilevato il pagina man, "-funroll-loops rende il codice più grandi, e possono o non possono farlo correre più veloce."

Altri suggerimenti

Per definire si utilizza

-D name=definition

come si fa nel tuo esempio:

$CPPFLAGS += " -DRICE"

nome -U
Annullare qualsiasi precedente definizione del nome, sia integrato o dotato di un'opzione -D.

$CPPFLAGS += " -URICE"

Anche se non sono sicuro se ti aiuto con indefiniti -O2 come si desidera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top