看我linux(ubuntu)下的64位编译器编译32位程序
2015-12-05 12:47
405 查看
大家看到这个不要好奇,我也是在分析结构体大小时想到的,
我们大家都知道在windows底下,我们想编译一个c程序(用64位和32位分别编译,特别不方便),除非是双系统,或者虚拟机,但是装这些有时候挺麻烦的,
但是但是,在linux底下这可是很方便的,
我们来看:
一 .查看当前linux系统到底是多少位!!!
方法1:
我们在linux终端下敲入这个命令:出现32(那么就是32位系统),出现64(那么就是64位系统)
大家看运行结果:
方法二:
大家来看运行结果:
方法三:
我觉得这是最简单的东西了:也好记:
运行结果:
方法四:
上面的一切都说明我的系统是64位:
好,接下来我们需要做的就是配置,让它也可以进行32位的编译
(插曲)
在安装 Ubuntu 的时候建立的帐户 sai,想把密码改成两个字母aa,方便输入。
运行终端
sai@xmomx:~$ passwd sai
更改 sai 的密码。
(当前)UNIX 密码: xx
输入新的 UNIX 密码: aa
重新输入新的 UNIX 密码:aa
必须选择更长的密码
输入新的 UNIX 密码: 1234567
重新输入新的 UNIX 密码: 1234567
Bad: new password is too simple
输入新的 UNIX 密码:
绿色为手动输入。怎么办?加上su权限执行即可。这样来做:
方案一:
sai@xmomx:~$ sudo passwdsai
[sudo] password for sai: xxx
输入新的 UNIX 密码: aa
重新输入新的 UNIX 密码: aa
passwd:已成功更新密码
假如我们并没有配置,就直接用 的话,会报错
程序1:
我们先看一下,在64位下运行的结果:
然后我们再看一下,在32位下运行的结果(我们直接用,也就是说是还没有配置,如:gcc test.c -m32),回报错:
好,接下来,到啦我们该配置的时候来:
步骤二(配置多构架内核,也就是同时支持64,32位)
(1),确认打开多构架
(2),打开多构架支持功能
依次执行上面的命令
另外第三个命令执行时间有点长,(哈哈,够大家去吃个饭,冲个coffee了,大家耐心等待吧!!!)
当我们敲完上面的命令时就说明,已经支持一部分了,但是现在,我们的程序还不能完全运行
接着我们还要输入如下命令:
这时我们的编译器已经完美了,也就是说用这个命令(gcc test.c -m32)
大家可以看一下我们程序运行的结果:
好了,0k,我们的编译器完成了我们的目标了。
但是,但是,大家注意到了吗?,对于linux,64,32位,它们分配内存情况并不一样(同样的结构体),我们可以看到
对于上面的程序
32位: 结构体大小位16
64位: 结构体大小位24
至于为什么??大家可以看这个链接:http://blog.csdn.net/msdnwolaile/article/details/50158463点击打开链接
从内存的角度分析了编译器分配的过程
(ps:上面配置32位的过程,借鉴与:http://www.cnblogs.com/mliudong/p/4086797.html,
点击打开链接 谢谢你啊!!)
我们大家都知道在windows底下,我们想编译一个c程序(用64位和32位分别编译,特别不方便),除非是双系统,或者虚拟机,但是装这些有时候挺麻烦的,
但是但是,在linux底下这可是很方便的,
我们来看:
一 .查看当前linux系统到底是多少位!!!
方法1:
getconf LONG_BIT
我们在linux终端下敲入这个命令:出现32(那么就是32位系统),出现64(那么就是64位系统)
大家看运行结果:
方法二:
file /sbin/int同样我们在linux终端下敲入这个命令:
大家来看运行结果:
方法三:
我觉得这是最简单的东西了:也好记:
uname -a
运行结果:
方法四:
dpkg --print-architecture运行结果:
上面的一切都说明我的系统是64位:
好,接下来我们需要做的就是配置,让它也可以进行32位的编译
(插曲)
在安装 Ubuntu 的时候建立的帐户 sai,想把密码改成两个字母aa,方便输入。
运行终端
sai@xmomx:~$ passwd sai
更改 sai 的密码。
(当前)UNIX 密码: xx
输入新的 UNIX 密码: aa
重新输入新的 UNIX 密码:aa
必须选择更长的密码
输入新的 UNIX 密码: 1234567
重新输入新的 UNIX 密码: 1234567
Bad: new password is too simple
输入新的 UNIX 密码:
绿色为手动输入。怎么办?加上su权限执行即可。这样来做:
方案一:
sai@xmomx:~$ sudo passwdsai
[sudo] password for sai: xxx
输入新的 UNIX 密码: aa
重新输入新的 UNIX 密码: aa
passwd:已成功更新密码
假如我们并没有配置,就直接用 的话,会报错
程序1:
#include <stdio.h> struct stu{ char a; double b; char c; }; int main(){ struct stu ss; printf("%d\n", sizeof(ss)); return 0; }
我们先看一下,在64位下运行的结果:
然后我们再看一下,在32位下运行的结果(我们直接用,也就是说是还没有配置,如:gcc test.c -m32),回报错:
好,接下来,到啦我们该配置的时候来:
步骤二(配置多构架内核,也就是同时支持64,32位)
(1),确认打开多构架
dpkg --print-foreign-architectures出现结果:i386,则为已经打开
(2),打开多构架支持功能
sudo dpkg --add-architecture i386 sudo apt-get update sudo apt-get dist-upgrade
依次执行上面的命令
另外第三个命令执行时间有点长,(哈哈,够大家去吃个饭,冲个coffee了,大家耐心等待吧!!!)
当我们敲完上面的命令时就说明,已经支持一部分了,但是现在,我们的程序还不能完全运行
接着我们还要输入如下命令:
sudo apt-get install gcc-multilib g++-multilib
这时我们的编译器已经完美了,也就是说用这个命令(gcc test.c -m32)
大家可以看一下我们程序运行的结果:
好了,0k,我们的编译器完成了我们的目标了。
但是,但是,大家注意到了吗?,对于linux,64,32位,它们分配内存情况并不一样(同样的结构体),我们可以看到
对于上面的程序
32位: 结构体大小位16
64位: 结构体大小位24
至于为什么??大家可以看这个链接:http://blog.csdn.net/msdnwolaile/article/details/50158463点击打开链接
从内存的角度分析了编译器分配的过程
(ps:上面配置32位的过程,借鉴与:http://www.cnblogs.com/mliudong/p/4086797.html,
点击打开链接 谢谢你啊!!)
相关文章推荐
- JSP第九次课:网上商城后台--首页设计及管理员功能实现
- mysql 如何更改root密码
- windows server 2008 R2 AD 域之---更改域用户密码策略(建域后不能更改密码策略处理办法)
- 我的LINUX基础笔记
- CentOS 忘记密码,单用户模式进入更改密码的操作方法
- oracle 用户解锁与更改登录密码
- share point 2010 重启应用池标识失效
- windows下更改mysql的root密码 wamp集成环境
- IBM服务器主板详细设置---BIOS 使用说明
- passwd修改用户密码
- Linux--Grub破解
- Windows Server 2008 (图解)安装详细流程
- centos linux系统忘记用户登录密码的解决方案
- 使用Cobbler批量部署Linux操作系统
- 路由器与交换机的密码恢复
- 重置Citrix License Console密码
- Serv-U设置允许用户更改密码
- Shell账户管理,用户和组管理
- MacBook Pro 开机密码忘记解决方法