2012-06-18 18 views
13

Forse una domanda molto banale:Come compilare un programma C++ come 64-bit su un computer a 64 bit?

Ho bisogno di compilare un programma come 64-bit (makefile precedente scritto per compilarlo come 32-bit).

Ho visto l'opzione -m32 che appare nei parametri della riga di comando con ogni compilazione di file. Così, ho modificato il makefile per eliminare -m32 in OPTFLAG, ma ancora una volta compilato il programma, vedo ancora -m32 e i binari sono ancora a 32 bit. Questo m32 viene anche da qualche altra parte?

+0

Cosa stai cercando di compilare? Forse puoi riconfigurarlo con flag appropriati se usa autotools invece di modificare Makefile. Se non è il tuo software, sarebbe meglio chiedere alla comunità corrispondente su come costruire correttamente il loro software. Solo dal punto di vista di gcc è necessaria la sua versione corretta e '-m64' http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options. – mlt

+0

make non predefine -m32, né alcun altro componente di sistema (a meno che non ci siano modifiche rilevanti alla distro specifica, ma di solito non lo sono), se è quello che stai chiedendo. – hvd

+0

@mlt -m64 non è necessario; -m64 è l'impostazione predefinita per un compilatore a 64 bit. – hvd

risposta

14

-m32 può essere venuta solo da qualche parte nei tuoi makefile, dovrai rintracciarlo (usa una grep ricorsiva) e rimuoverlo.

When I am able to force -m64, I get "CPU you selected does not support x86-64 instruction set".Any clues?. uname -a gives x86_64

Tale errore significa che c'è un'opzione come -march=i686 nei makefile, che non è valido per la compilazione a 64 bit, provare a rimuovere anche questo.

Se non è possibile rimuoverlo (provare più difficile!) Quindi aggiungere -march=x86-64 dopo che sulla riga di comando verrà specificato un tipo di CPU a 64 bit generico.

4

Se il software che si sta cercando di costruire è autotools-based, questo dovrebbe fare il trucco:

./configure "CFLAGS=-m64" "CXXFLAGS=-m64" "LDFLAGS=-m64" && make 

Oppure, solo per un Makefile semplice:

env CFLAGS=-m64 CXXFLAGS=-m64 LDFLAGS=-m64 make 
+0

Come già detto in un commento, '-m64' è l'impostazione predefinita per un gcc configurato a 64 bit. Se devi specificare '-m64', stai facendo qualcosa di sbagliato. Se il pacchetto pensa che sia necessario aggiungere '-m32', probabilmente sta facendo molto di più, e non hai a che fare con il resto. – hvd

Problemi correlati