我正在尝试安装 Adobe Air(Balsamiq Mockups 所需),当我尝试运行安装程序时,我得到:
sudo: unable to execute ./AdobeAIRInstaller.bin: No such file or directory
我确保该文件是可执行的,通过谷歌搜索,似乎在 64 位系统上运行 32 位可执行文件会这样。目前每个人的建议似乎是安装 ia32-libs,但是 Debian Jessie 中不再有该软件包(他们似乎已经重构了多架构支持)。
我需要做什么?multiarch-support 已经安装,还有其他吗?
答案1
一些背景知识
是的,ia32-libs
在真正的多架构实现之前,这是一个权宜之计——基本上,这个包只是包含了一堆 32 位版本的一些流行的图书馆。
你现在要做的是
启用外国架构
i386
在dpkg
:dpkg --add-architecture i386
弄清楚这个东西需要什么库,并安装相应的 32 位 (
i386
) 版本,例如apt-get install libfooX.Y:i386
但请注意一些不幸的事情:
Debian 中的多架构是基于这样一个事实:依赖架构的库被安装到依赖架构的目录中,就像本
/usr/lib/x86_64-linux-gnu
机amd64
库和/usr/lib/i386-linux-gnu/
相同i386
同一系统上的库。这里的问题是,第三方软件不知道 Debian 中实现的多架构,通常期望使用类似这样的知名名称来查找它所依赖的库
/usr/lib/libfoo.so.X.Y.Z
,但最近的 Debian 版本并非如此。可以通过符号链接或
LD_PRELOAD
使用其他方式弄乱动态加载器来解决此问题(例如,使其使用备用缓存文件而不是/etc/ld.so.cache
,其中包含对安装在其他地方的库的引用),但请参阅下一点。据我回忆,Adobe Air 的 Linux 兼容版本开发工作已经停止了很长时间,所以最新的 Adobe Air blob 可能依赖于 Debian 最新版本中不存在的过时库版本。而更新的库意味着 API/ABI 发生变化,而这些变化无法通过符号链接解决。
可能的解决方案
如果无法摆脱 Adobe 的这种令人厌恶的东西,我可能会尝试依靠 Linux内核的API/ABI 相当稳定,并尝试创建一个chroot或者龙芯环境专门使用从任何声称与之兼容的操作系统中提取的库来运行这个 blob。
基本上,对于 chroot,您需要创建一个目录,其中包含一组最少的库(可能是一些二进制文件,如/bin/bash
),以及众所周知的名称(如/usr/lib/libfoo.so
)。
这不是一种简单的方法(您需要进行大量的反复试验,并使用readelf
、ldd
提取和复制文件等),但它可以发挥作用,因为最终所有库都使用系统调用来调用内核,并且这些库在内核版本中都非常稳定。