现在大多数使用C和C++的编译器(gcc或clang),现在都带有默认的64位版本。好吧,就速度而言,这将是一个不错的选择。但是,如果有人出于测试或调试目的将程序作为32位而不是64位运行,则会导致问题。因此,我们必须对此有所了解。
在继续进行之前,让我们确认系统中当前安装了gcc的哪个版本。
只需在Linux终端上键入以下命令。
Command: gcc -v
Output
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
......................
......................
因此,第四行目标:x86_64-linux-gnu确认我们正在运行64位gcc。
现在,为了使用32位gcc进行编译,只需在编译“ C”语言程序的命令行中添加标志-m32。例如,要通过Linux终端编译geek.c文件,必须使用-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-multilib
For C++ language:
sudo apt-get install g++-multilib
之后,您将能够在64位系统上编译32位二进制文件。
添加“ -m32”标志后如何检查程序是否用32位编译?
好吧,我们可以通过以下程序轻松地进行检查。
// C program to demonstrate difference
// in output in 32-bit and 64-bit gcc
// File name: geek.c
#include
int main()
{
printf("Size = %lu", sizeof(size_t));
}
通过这两个不同的命令在Linux中编译以上程序,
默认的64位编译
Input: gcc -m64 geek.c -o out
Output: ./out
Size = 8
强制32位编译,
Input: gcc -m32 geek.c -o out
Output: ./out
Size = 4
我们可以从上述程序中得出任何结论吗?是的,也许,让我们尝试了解更多。
由于数据类型(如long,size_t,指针数据类型(int *,char *等))的大小取决于编译器,因此它将根据编译器的位生成不同的输出。
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。