如何在C和C++中编译64位GCC的32位程序

主要是C和C++的编译器(GCC或CLAN),现在默认为 64位 版本就速度而言,这是个不错的选择。但如果有人想作为一个整体运行他们的程序,这会导致问题 32位 而不是 64位 用于测试或调试目的。因此,我们必须了解这一点。 在继续之前,让我们确认 gcc 当前已安装在我们的系统中。 只需在Linux终端上键入以下命令。

null
Command: gcc -vOutput Using built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapperTarget: x86_64-linux-gnu............................................

因此,第四行 目标:x86_64-linux-gnu 确认我们正在运行64位gcc。 现在,为了使用32位gcc进行编译,只需添加一个标志 -m32 在编译C语言程序的命令行中。例如,编译一个 笨蛋。C 通过Linux终端,您必须使用 -m32 旗帜。

Command: gcc -m32 geek.c -o geek

如果出现如下错误:

fatal error: bits/predefs.h: No such file or directory

然后,它表明缺少一个标准的gcc库。在这种情况下,您必须安装 gcc multlib 通过使用以下命令:

For C language:sudo apt-get install gcc-multilibFor C++ language:sudo apt-get install g++-multilib

之后,您将能够在64位系统上编译32位二进制文件。 在添加“-m32”标志后,如何检查程序是否以32位编译? 我们可以通过下面的程序轻松地检查这一点。

CPP

// C program to demonstrate difference
// in output in 32-bit and 64-bit gcc
// File name: geek.c
#include<stdio.h>
int main()
{
printf ( "Size = %lu" , sizeof ( size_t ));
}


用这两个不同的命令在Linux中编译上述程序, 默认64位编译,

Input: gcc -m64 geek.c -o outOutput: ./outSize = 8

强制32位编译,

Input: gcc -m32 geek.c -o outOutput: ./outSize = 4

我们能从上述计划中得出什么结论吗。是的,也许,让我们试着了解更多。 由于数据类型的大小 长的 尺寸 ,指针数据类型(int*、char*等) 依赖于编译器,因此它将根据编译器的位生成不同的输出。 本文由 Shubham Bansal .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享