2012-06-18 4 views
13

Być może bardzo banalne pytanie:Jak skompilować program C++ jako 64-bitowy na komputerze 64-bitowym?

Potrzebuję skompilować program jako 64-bitowy (wcześniej plik Makefile napisany, aby skompilować go jako 32-bitowy).

Widziałem opcję -m32 pojawiającą się w parametrach wiersza poleceń przy każdej kompilacji plików. Więc zmodyfikowałem plik Makefile, aby pozbyć się -m32 w OPTFLAG, ale znowu, gdy program się kompiluje, nadal widzę -m32, a pliki binarne wciąż są 32-bitowe. Czy ten m32 pochodzi również z innego miejsca?

+0

Co próbujesz skompilować? Być może możesz go przekonfigurować za pomocą odpowiednich flag, jeśli użyje autotools zamiast modyfikować Makefile. Jeśli nie jest to twoje własne oprogramowanie, lepiej spytaj odpowiednią społeczność, jak poprawnie zbudować swoje oprogramowanie. Tylko z punktu widzenia gcc potrzebujesz jego odpowiedniej wersji i '-m64' http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options. – mlt

+0

make nie predefiniuje -m32, ani nie ma żadnego innego komponentu systemowego (chyba że istnieją jakieś istotne zmiany w zakresie dystrybucji, ale zazwyczaj nie ma), jeśli o to prosisz. – hvd

+0

@mlt -m64 nie jest konieczne; -m64 jest ustawieniem domyślnym dla kompilatora 64-bitowego. – hvd

Odpowiedz

14

-m32 można pochodzących tylko skądś w twoich plikach makefile, będziesz musiał go wyśledzić (użyj rekurencyjnego grep) i go usunąć.

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

Błąd ten oznacza, że ​​nie jest to opcja jak -march=i686 w makefile, który nie jest ważny dla 64-bitowych kompilacji, spróbuj usunąć że zbyt.

Jeśli nie możesz go usunąć (spróbuj!), To dodanie w wierszu poleceń -march=x86-64 określi ogólny 64-bitowy typ procesora.

4

Jeśli oprogramowanie staramy się budować to autotools opartych to powinno załatwić sprawę:

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

Albo tylko na zwykłym Makefile:

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

Jak już wspomniałem w komentarzu, '-m64' jest domyślną konfiguracją gcc skonfigurowaną w wersji 64-bitowej. Jeśli musisz podać '-m64', robisz coś nie tak. Jeśli pakiet myśli, że musi dodać '-m32', prawdopodobnie robi to więcej niż tylko to, a Ty nie zajmujesz się resztą. – hvd

Powiązane problemy