2012-06-18 26 views
13

Belki de çok önemsiz bir soru:64 bit makinede 64 bit olarak bir C++ programı nasıl derlenir?

Bir programı 64 bit olarak derlemeliyim (önceki makefile, 32 bit olarak derlemek için yazılmıştır).

Her dosya derlemesiyle komut satırı parametrelerinde görünen -m32 seçeneğini gördüm. Bu yüzden, OPMFLAG'de -m32'den kurtulmak için makefile değiştirdim, ama yine de program derlendiğinde, hala -m32'yi görüyorum ve ikili dosyalar hala 32-bit. Bu m32 başka bir yerden de geliyor mu?

+0

Neyi derlemeye çalışıyorsunuz? Belki de Makefile'yi değiştirmek yerine autotools kullanıyorsa, uygun bayraklarla yeniden düzenleyebilirsiniz. Kendi yazılımınız değilse, yazılımlarını düzgün bir şekilde nasıl oluşturacağınıza ilişkin olarak ilgili topluluğa sormanız daha iyi olur. Sadece gcc bakış açısından uygun sürümüne ihtiyacınız var ve '-64 'http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options. – mlt

+0

make ne -m32'yi ne de başka bir sistem bileşenini (herhangi bir ilgili dağıtımla ilgili değişiklikler olmadıkça, ancak genellikle yoktur) önceden sormaz, eğer istediğin buysa. – hvd

+0

@mlt -m64 gerekli değildir; -m64, 64-bit bir derleyici için varsayılan değerdir. – hvd

cevap

14

-m32 yalnızca geliyor olabilir Makefillerinizdeki bir yerden, onu takip etmelisiniz (tekrarlayan bir grep kullanın) ve onu kaldırmalısınız.

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

O hata 64 bit derleme için, bunu da kaldırmayı deneyin geçerli değil makefiles -march=i686 gibi bir seçenek olduğu anlamına gelir.

Eğer kaldıramazsanız (daha sert deneyin!) Daha sonra komut satırında -march=x86-64 ekleyerek genel 64 bit CPU türü belirtebilirsiniz.

4

Eğer inşa etmeye çalışıyoruz yazılım Autotools tabanlı ise, bu hile yapmak gerekir: Ya da, sadece düz bir Makefile için

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

:

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

Zaten bir yorumda belirtildiği gibi, 64-bit yapılandırılmış gcc için '-m64 'varsayılan değerdir. '-m64 'belirtmeniz gerekiyorsa, yanlış bir şey yapıyorsunuz demektir. Paket, '-m32' eklemesi gerektiğini düşünüyorsa, muhtemelen bundan daha fazlasını yapıyor ve geri kalanıyla uğraşmıyorsunuz. – hvd