c++ - 编译程序 linux 32 位 vs 64 位

标签 c++ linux

我是 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 位“用户空间”——特别是 64 位版本的 libc6 和编译器库。通常,您的编译器只会为您的环境选择合适的模式。

一些 Linux 发行版提供“混合”环境:64 位内核与 32 位和 64 位库。如果您的环境是这样的,您的编译器可能会提供编译这两种类型的二进制文件。如何在它们之间进行选择取决于您的硬件平台和编译器。对于 x86-64 平台上的 gcc,编译器开关将是 -m32-m64 -- 看看 gcc man页面。

关于c++ - 编译程序 linux 32 位 vs 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042842/

相关文章:

c++ - unsigned char的减法运算

c++ - 尽管更改了字符串,但我的字符串返回了某个数字

c++ - 使用 std::set 的 .begin() 和 .end() 函数会产生意想不到的结果

c++ - 为什么类中不允许函数模板特化?

linux - errno.h 套接字/连接错误分类

php - 无法在 docker 中挂载卷

C++:如何在不强制转换的情况下避免继承类中的 "invalid covariant return type"?

python - 如何使用 bash 脚本结束 django 进程?

mysql - Sequel Pro 的 Linux 替代品? (基于 GUI 的 sql 导航器)

c++ - 是否有基于 C++ 的 Debian Linux Web 应用程序框架,如 .NET 框架