我正在尝试在 Virtualbox VM 上安装 Arma 2 OA 专用服务器,这样我就可以在沙盒环境中测试自己的任务,这样我就可以将它们卸载到网络中的另一台计算机上。(另一台计算机正在运行 VM,但它是 Windows 计算机,我不想麻烦地安装它)它至少需要 2GB,最好是 4GB 的 RAM,所以我想安装 AMD64 版本的 ubuntu 13.10 来实现这一点。
‘如何在 64 位版本的 Ubuntu 上运行 32 位程序?' 已经解释了如何通过 apt-get 和/或 dpkg 安装 32 位软件,但这并不适用于这种情况。
该服务器在 Arma 游戏开发商 BI Studio 的网站上以压缩下载的形式提供。其安装说明显然与当前的最新技术略有不同。(可能是因为最新技术最近才更新 :))它指出我必须安装 ia32-libs,但现在显然已被弃用。现在我必须找出如何安装正确的软件包以确保它能够运行。
在这些问题上,我的经验水平就像是初级中级。我通过 apt-get 安装了很多软件包;我过去已经解决了依赖性问题;我没有不使用软件包管理器安装过很多软件。我可以处理基本的管理工作,比如编辑 conf 文件等。
我刚刚尝试安装它,而不是通过 apt-get 安装 ia32-libs,而是安装 gcc 来获取库。我的理由是 gcc 将包含用于向后兼容编码的文件,并且在 linux 上,所有库(据我所知)都安装在系统级别/libs
。到目前为止,它似乎启动了。(我可以通过游戏内的网络浏览器连接到游戏服务器,因此它正在通信)我不确定在运行游戏服务器程序时是否有任何依赖项检查,所以我有几个问题:
答案1
这主要取决于软件及其编写方式。在这种情况下,我会选择 32 位 Debian(如果有)二进制文件或已编译的 32 位二进制文件。这在我的回答中已经解释过了如何在 64 位版本的 Ubuntu 上运行 32 位程序?并演示了甚至可以运行 32 位系统的 64 位版本(这在几年前是不可能的)。在 64 位系统中运行 32 位应用程序实际上更容易。
通常,当您运行二进制文件时,它会通知您缺少的库,您可以在存储库中查找。
13.10 是否捕获对 ia32libs 库的任何调用并将这些调用转换为 amd64 上的正确代码?
不。开发人员应该这样做。系统仅显示使用 GNU Linker 的库ld
。如果软件试图使用“硬编码”库,那么您必须欺骗他并将它们指向正确的库。现代、编写良好的软件不需要这样做。
如果它运行,是否意味着所有必需的库都已正确加载,或者当所需的库毕竟丢失时它是否会稍后崩溃?
如果可以运行,则完美。通过库在可执行文件的启动时加载,如果没有它们(即缺少其中一些),它将无法启动,但即使它们存在,也不是所有调用都在启动时调用,因此某个函数的某个调用可能会改变其行为方式,而应用程序不支持这种情况,从而导致崩溃。这是极端情况,但它们是可能的,因此您可能会注意到它是否与较新的库不兼容。但是,那是另一个问题。要解决这个问题,您必须适应新的库或降级已安装的库。
是否需要采取诸如安装 gcc 之类的解决方法?
gcc
是一个编译器。只有当您使用 C 或 C++ 编译代码时才需要安装它。其他情况可能需要解决方法,但我还没有看到需要编译器gcc
才能运行的“二进制文件”(已编译的可执行文件)。
如何找出运行此软件可能需要哪些库?(或任何其他未通过包管理器提供的 32 位软件)
有点粗暴,但如果说明没有明确说明您需要哪些库,或者使用命令ld-linux.so --list
。例如:
$ /lib64/ld-linux-x86-64.so.2 --list /bin/bash
linux-vdso.so.1 => (0x00007fffd479f000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f0d39138000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f0d38f34000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0d38b6a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f0d3937f000
(ldd
二进制文件提供了相同的输出,感谢@ubfan)
如您所见,bash
使用 linux-vdso、libtinfo.so、libdl.so 和 libc.so。如果这些库正确,则bash
对它们感到满意。这是动态链接双星。您也可以使用来--verify
检查二进制文件是否真的是动态链接的。
然后你取图书馆的名字,比如说库信息.so.5,它包含在软件包中:
File Packages
/lib/i386-linux-gnu/libtinfo.so.5 libtinfo5 [not amd64]
/lib/x86_64-linux-gnu/libtinfo.so.5 libtinfo5 [not i386]
/lib32/libtinfo.so.5 lib32tinfo5 [not i386]
/lib64/libtinfo.so.5 lib64tinfo5 [not amd64]
/usr/lib/debug/libtinfo.so.5 libtinfo5-dbg
/usr/libx32/libtinfo.so.5 libx32tinfo5
因此,我们只需要为二进制文件的体系结构安装正确的包(如果是 32 位,则:i386
在包名称中添加 64 位:amd64
),就可以了。
不用说,要在 32 位平台上运行 64 位二进制文件,您的 CPU 必须支持 64 位(2008 年及以后的大多数系统都支持),并且很可能需要安装 64 位内核。