您的位置:首页 > 其它

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

2015-11-04 08:02 357 查看
看了看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命令。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: