在C和C ++中的64位gcc上编译32位程序

如今,编译器带有默认的64位版本。有时我们需要将代码编译并执行到某些32位系统中。那时,我们必须使用thisS功能。

首先,我们刮胡子要检查gcc编译器的当前目标版本。要检查这一点,我们必须键入此命令。

gcc –v

Using built-in specs.

COLLECT_GCC=gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper

OFFLOAD_TARGET_NAMES=nvptx-none

OFFLOAD_TARGET_DEFAULT=1

Target: x86_64-linux-gnu

...........

...........

...........

这里显示目标是x86_64。因此,我们正在使用gcc的64位版本。现在要使用32位系统,我们必须编写以下命令。

gcc –m32 program_name.c

有时,此命令可能会产生一些错误,如下所示。这表明缺少gcc标准库。在这种情况下,我们必须安装它们。

In file included from test_c.c:1:0:

/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file

or directory

#include <bits/libc-header-start.h>

^~~~~~~~~~~~~~~~~~~~~~~~~~

compilation terminated.

现在,要为gcc安装标准库,我们必须编写以下命令。

sudo apt-get install gcc-multilib

sudo apt-get install g++-multilib

现在,通过使用此代码,我们将看到在32位系统和64位系统中执行的区别。

示例

#include<stdio.h>

main() {

   printf("The Size is: %lu\n", sizeof(long));

}

输出结果

$ gcc test_c.c

test_c.c:3:1: warning: return type defaults to ‘int’ [-Wimplicit-int] main(){

^~~~

$ ./a.out

The Size is: 8

输出结果

$ gcc -m32 test_c.c

test_c.c:3:1: warning: return type defaults to ‘int’ [-Wimplicit-int]

main(){

^~~~

test_c.c: In function ‘main’:

test_c.c:4:28: warning: format ‘%lu’ expects argument of type ‘long unsigned

int’, but argument 2 has type ‘unsigned int’ [-Wformat=]

printf("The Size is: %lu\n", sizeof(long));

~~^

%u

$ ./a.out

The Size is: 4

以上是 在C和C ++中的64位gcc上编译32位程序 的全部内容, 来源链接: utcz.com/z/357488.html

回到顶部