在极少数情况下,有必要使用 a.out 二进制文件,要么是因为源代码不可用,要么是因为由于某些原因无法从源代码构建新的 ELF 二进制文件。
碰巧的是,ELF 安装几乎总是在 /usr/i486-linuxaout/lib
目录中拥有一整套 a.out 库。a.out 库的编号方案与 ELF 库的编号方案不同,巧妙地避免了可能引起混淆的冲突。因此,a.out 二进制文件应该能够在运行时找到正确的库,但这可能并非总是如此。
请注意,内核需要内置 a.out 支持,可以直接内置或作为可加载模块。可能需要重新构建内核才能启用此支持。此外,某些 Linux 发行版需要安装特殊的兼容性软件包,例如 Debian 的 xcompat
,用于执行 a.out X 应用程序。
几年前,Jerry Smith 编写了一个非常方便的通讯录程序。它使用了 Motif 库,但幸运的是,它以 a.out 格式的静态链接二进制文件的形式提供。不幸的是,源代码需要进行大量调整才能使用 lesstif 库重新构建。更不幸的是,a.out 二进制文件在 ELF 系统上崩溃,并显示以下错误消息。
xrolodex: can't load library '//lib/libX11.so.3'
No such library
碰巧的是,在 /usr/i486-linuxaout/lib
中确实存在这样一个库,但 xrolodex 在运行时无法定位它。简单的解决方案是在 /lib
目录中提供一个符号链接
ln -s /usr/i486-linuxaout/lib/X11.so.3.1.0 libX11.so.3
事实证明,还需要为 libXt.so.3 和 libc.so.4 库提供类似的链接。当然,这需要以 root 身份完成。请注意,您应绝对确保您不会覆盖或引起与预先存在的库的版本号冲突。幸运的是,新的 ELF 库的版本号高于旧的 a.out 库,以预见并防止此类问题。
创建这三个链接后,xrolodex 运行良好。
xrolodex 软件包最初发布在 Spectro 上,但似乎已从那里消失。目前可以从 Sunsite 下载,格式为 tar.Z 格式的源文件 [512k]。