Linux(ubuntu)下的64位编译器编译32位程序_电气自动化网
首页 资讯 应用 高压 设计 行业 低压 电路图 关于

嵌入式

旗下栏目: PLC 嵌入式 单片机 DCS

Linux(ubuntu)下的64位编译器编译32位程序

嵌入式 | 发布时间:2018-06-02 | 人气: | #评论# | 本文关键字:Linux,ubuntu,编译器
摘要:我们大家都知道在windows底下,我们想编译一个c程序(用64位和32位分别编译,特别不方便),除非是双系统,或者虚拟机,但是装这些有时候挺麻烦的, 但是但是,在linux底下这可是很方便的,

我们大家都知道在windows底下,我们想编译一个c程序(用64位和32位分别编译,特别不方便),除非是双系统,或者虚拟机,但是装这些有时候挺麻烦的,但是但是,在linux底下这可是很方便的,我们来看:

一    .查看当前linux系统到底是多少位

方法1:

  1. getconf  LONG_BIT  

 我们在linux终端下敲入这个命令:出现32(那么就是32位系统),出现64(那么就是64位系统)

1.png

方法二:

  1. file   /sbin/int  

同样我们在linux终端下敲入这个命令:

1527953048745912.png

方法三:

我觉得这是最简单的东西了:也好记:

  1. uname  -a  

运行结果:

1527953052970969.png

方法四:

  1. dpkg --print-architecture  

运行结果:

4.png

上面的一切都说明我的系统是64位:

好,接下来我们需要做的就是配置,让它也可以进行32位的编译,在安装 Ubuntu 的时候建立的帐户 sai,想把密码改成两个字母aa,方便输入。运行终端

[email protected]:~$ passwd sai
更改 sai 的密码。
(当前)UNIX 密码: xx
输入新的 UNIX 密码: aa
重新输入新的 UNIX 密码:aa
必须选择更长的密码
输入新的 UNIX 密码: 1234567
重新输入新的 UNIX 密码: 1234567
Bad: new password is too simple
输入新的 UNIX 密码:

 绿色为手动输入。怎么办?加上su权限执行即可。这样来做:

方案一:

[email protected]:~$ sudo passwdsai
[sudo] password for sai: xxx
输入新的 UNIX 密码: aa
重新输入新的 UNIX 密码: aa
passwd:已成功更新密码

假如我们并没有配置,就直接用 的话,会报错

程序1:

  1. #include <stdio.h>                                                               

  2. struct stu{  

  3.         char a;  

  4.         double b;  

  5.         char c;  

  6. };  

  7. int main(){  

  8.         struct stu ss;  

  9.         printf("%d\n", sizeof(ss));  

  10.         return 0;  

  11. }  

我们先看一下,在64位下运行的结果:

1.png

然后我们再看一下,在32位下运行的结果(我们直接用,也就是说是还没有配置,如:gcc  test.c   -m32),回报错:

2.png

好,接下来,到啦我们该配置的时候来:

步骤二(配置多构架内核,也就是同时支持64,32位)

(1).确认打开多构架

  1. dpkg --print-foreign-architectures  

出现结果:i386,则为已经打开

3.png

(2).打开多构架支持功能

sudo dpkg --add-architecture i386  

  1. sudo apt-get update  

  2. sudo apt-get dist-upgrade  

依次执行上面的命令

另外第三个命令执行时间有点长,(哈哈,够大家去吃个饭,冲个coffee了,大家耐心等待吧!!!)

当我们敲完上面的命令时就说明,已经支持一部分了,但是现在,我们的程序还不能完全运行

接着我们还要输入如下命令:

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

这时我们的编译器已经完美了,也就是说用这个命令(gcc test.c -m32)

大家可以看一下我们程序运行的结果:

4.png

好了,0k,我们的编译器完成了我们的目标了。

但是,但是,大家注意到了吗?,对于linux,64,32位,它们分配内存情况并不一样(同样的结构体),我们可以看到对于上面的程序

32位:        结构体大小位16  64位:        结构体大小位24

责任编辑:ubuntu
首页 | 电气资讯 | 应用技术 | 高压电器 | 电气设计 | 行业应用 | 低压电器 | 电路图 | 关于我们 | 版权声明

Copyright 2017-2018 电气自动化网 版权所有 辽ICP备17010593号-1

电脑版 | 移动版 原创声明:本站大部分内容为原创,转载请注明电气自动化网转载;部分内容来源网络,如侵犯您的权益请发送邮件到[email protected]联系我们删除。