我对32位和64位的区别还不太了解。我在Linux上用C++编写了程序。我想知道是什么决定了程序是32位还是64位?这是因为我是使用其他人编写的makefile来编译程序的。
我该如何检查它,并将其修改为64位?
谢谢。
要检查程序是否为64位,您可以编译并运行它。
file <name-of-the-binary>
例子:
~> file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
所以,在我的系统上,/bin/ls
是32位的。
代码是编译为32位还是64位取决于您的环境和编译器设置。要编译64位程序,您需要一个64位内核和一个64位的“用户空间”——特别是libc6和编译器库的64位版本。通常,您的编译器会根据您的环境选择适当的模式。
一些Linux发行版提供“混合”环境:一个64位内核,带有32位和64位库。如果您的环境是这样的,您的编译器可能会提供编译两种类型的二进制文件。如何在它们之间进行选择取决于您的硬件平台和编译器。对于x86-64平台上的gcc,编译器开关将是-m32
和-m64
——只需查看gcc
手册页即可。
更改gcc的编译选项(我认为应该是-m64而不是-m32),其中定义了编译参数。
您还应检查外部依赖项(库)是否也是64位,或者至少仍然可以从您的64位代码中使用。
64位表示用64个比特(而不是32个)来表示整数。由于内存使用整数进行访问,这意味着(由于您的整数可以更大),您可以索引更多的内存。
编译64位程序的最简单方法是在64位计算机上编译它,但编译器也有标志(如其他答案中所述),但如果您的依赖项不是64位,则可能会出现问题。