ubuntu16 64位 编译64位程序和32位程序

Posted cocoajin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu16 64位 编译64位程序和32位程序相关的知识,希望对你有一定的参考价值。

安装了ubuntu16 64位的系统,想在该环境下用gcc编译64位和32位的程序

默认已经安装了64位环境的gcc

1. 首先确认安装的环境是不是64位的

cocoa@cocoaUKlyn:~/Desktop$ dpkg --print-architecture

以下输出表示为64位的
amd64

2. 确认系统是否支持多架构环境

cocoa@cocoaUKlyn:~/Desktop$ dpkg --print-foreign-architectures

以下输出表示支持32位的架构
i386

 如果不支持那么手动打开,如下

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get dist-upgrade

3. 安装支持32编译程序的gcc库

sudo apt-get install gcc-multilib g++-multilib

4. 编译一个测试程序 main.c如下

int main(int argc,char *argv[])
{
    if(argc!=2)
    {
        printf("please input one argv\\n");
        return 0;
    }
    printf("argc=%d ,argv[1]=%s\\n",argc,argv[1]);
    return 0;
}

5. 分别编译出64位,32位的可执行程序,main64,main32

cocoa@cocoaUKlyn:~/Desktop$ gcc -o main32 -m32 main.c 
cocoa@cocoaUKlyn:~/Desktop$ gcc -o main64 -m64 main.c 

6. 使用file命令查看编译的程序架构,

cocoa@cocoaUKlyn:~/Desktop$ file main64 
main64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=f8573379cf22e444381d36eec08862e69a90ae4d, not stripped
cocoa@cocoaUKlyn:~/Desktop$ file main32 
main32: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=cbff7c2ddf45b505ffd1e60adce482c0cc896475, not stripped

7. 运行编译的64位,32位测试程序

cocoa@cocoaUKlyn:~/Desktop$ ./main64 this64
argc=2 ,argv[1]=this64
cocoa@cocoaUKlyn:~/Desktop$ ./main32 this32
argc=2 ,argv[1]=this32

 

参考:https://www.cnblogs.com/mliudong/p/4086797.html

 

以上是关于ubuntu16 64位 编译64位程序和32位程序的主要内容,如果未能解决你的问题,请参考以下文章

编译 64 位 Linux 的 32 位 GTK+ 应用程序

Ubuntu 16.04使用NASM编译时用ld链接程序出现:i386 架构于输入文件 sandbox.o 与 i386:x86-64 输出不兼容(I386 architecture in the i

16位/32位/64位CPU的位究竟是说啥

64位的ubuntu14.04 LTS安装 Linux交叉编译工具链及32位“ia32-libs”依赖库

ubuntu 16 64位编译安装php

Ubuntu 16.04 64位安装YouCompleteMe