在64-bit debian wheezy上运行32-bit程序真正需要做什么

看了看debian wiki上的multiarch,对于在64-bit debian wheezy上运行32-bit程序,了解了所需安装的最少软件包。
multiarch是在debian wheezy(7.0)上首次引入的,旧版的debian是不支持multiarch的。

网上常见的运行32-bit程序的方法分如下3步:
1. 添加软件包管理器的i386(32-bit)支持支持
dpkg --add-architecture i386
2. 更新软件包列表,以包含32-bit的软件
apt-get update
3. 安装32-bit的库
aptitude install ia32-libs
执行完上述3步后,就能运行32-bit程序了。

在64-bit debian wheezy中要运行32-bit程序,前两步和上述方法一样,而关于上述的第3步,执行完后会安装一大堆lib,而一个32-bit程序并不一定会依赖那么多lib。
如果只需要运行几个32-bit程序,在64-bit debian wheezy中,只需要安装32-bit程序所依赖的lib就可以了。

要查看所依赖的lib,执行如下命令:
ldd your_32bit_program
但上述命令貌似在缺少某些32-bit lib时不好使,这时,需要把32-bit程序拷贝到32-bit Linux系统上执行一下上述命令,比如,可以使用VirtualBox启动32-bit Linux临时执行一下上述命令。
以arm-none-linux-gnueabi-cpp为例,执行ldd arm-none-linux-gnueabi-cpp后,终端有如下输出:
linux-gate.so.1 (0xf779d000)
libm.so.6 => /lib/libm.so.6 (0xf7766000)
libc.so.6 => /lib/libc.so.6 (0xf7618000)
/lib/ld-linux.so.2 (0xf779e000)

其中linux-gate.so.1是VDSO,不管它,具体原因可以上网搜索。
到64-bit debian wheezy的终端下,执行apt-file search libm.so.6,终端有如下输出:
libc6: /lib/x86_64-linux-gnu/libm.so.6
libc6-i386: /lib32/libm.so.6
执行apt-file search libc.so.6,终端有如下输出:
libc6: /lib/x86_64-linux-gnu/libc.so.6
libc6-i386: /lib32/libc.so.6
执行apt-file search ld-linux.so.2,终端有如下输出:
libc6-i386: /lib/ld-linux.so.2
libc6-i386: /lib32/ld-linux.so.2
上述apt-file的输出中都包含libc6-i386,说明arm-none-linux-gnueabi-cpp依赖32-bit的libc6。

要安装32-bit版本的libc6,执行如下命令:
apt-get install libc6:i386
此时,试运行arm-none-linux-gnueabi-cpp,可以执行了。
并且发现,安装了libc6:i386之后,在64-bit debian wheezy下执行ldd your_32bit_program就好使了。

至此,运行32-bit程序arm-none-linux-gnueabi-cpp需要做的事就完成了。按照上述方法,不需要安装庞大的ia32-libs,就可以运行所需的32-bit程序了。

PS:要注意,ldd命令后边的参数必须是可执行文件,像Adobe Reader,安装完后/usr/bin/acroread是一个shell脚本而不是可执行文件,此时要找到脚本调用的可执行文件再执行ldd命令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值