编译程序linux 32位vs 64位

时间:2010-10-28 12:21:35

标签: c++ linux

我是32位vs 64位的新手。我用Linux编写了C ++程序。我想知道程序是32位还是64位?这是因为我从其他人编写的makefile编译程序。

我如何检查它,如何将其修改为64位?

感谢。

4 个答案:

答案 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还有点。)