我是32位vs 64位的新手。我用Linux编写了C ++程序。我想知道程序是32位还是64位?这是因为我从其他人编写的makefile编译程序。
我如何检查它,如何将其修改为64位?
感谢。
答案 0 :(得分:6)
要检查程序是否为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位“userland” - 特别是64位版本的libc6和编译器库。通常,您的编译器只会为您的环境选择合适的模式。
某些Linux发行版提供“混合”环境:64位内核,包含32位和64位库。如果您的环境是这样的,您的编译器可能会提供编译两种类型的二进制文件。如何在它们之间进行选择取决于您的硬件平台和编译器。对于x86-64平台上的gcc,编译器开关将为-m32
和-m64
- 只需查看gcc
手册页。
答案 1 :(得分:5)
您可以使用file命令检查生成的可执行文件是32位还是64位。
然后,正如已经回答的那样,-m64 and -m32 options可用于指示编译器。您需要拥有所有可用的依赖项(库)。
答案 2 :(得分:0)
更改gcc的编译选项(我认为是-m64而不是-m32),其中定义了编译参数。
您还应检查外部依赖项(库)是否为64位,或者至少仍可使用64位代码。
答案 3 :(得分:-1)
64位表示有64位(而不是32位)用于表示整数。由于使用整数访问内存,这意味着(因为您的整数可以更大),您可以索引更多内存。
编译64位程序的最简单方法是在64位计算机上编译它,但编译器也有标记(如另一个答案中所述),但它们可能有问题(如果你的依赖关系不是64还有点。)