Next Previous Contents

6. 向后兼容 a.out 二进制

在一些较少的案例里,必须使用 a.out 二进制,或因为源代码不可用,否则因此为一些理由构建构来自源的新 ELF 二进制是不可能的。


碰巧,ELF 安装几乎总是有一个/usr/i486-linuxaout/lib 目录里的a.out的完全设置。多个不同的 ELF 数种编码制为 a.out 库,聪明的避免能引起的冲突, a.out 二进制在运行时因此能找到正确的库,但不可能总是这样的情况。

注意需要把 a.out 支持编译内核里,或者作为模块加载。这也许必须重新编译内核才可以。另外一些 Linux 发行版需要专用的兼容包安装,比如 Debian 的可执行 a.out X 应用程序 xcompat 。

 

6.1 一个例子

在后来几年Jerry Smith 写过一个方便的 rolodex 程序。虽然它使用图形库,但幸运地是也可有效地作为静态链接二进制 a.out 格式,不幸地是,源码需要多个重新使用lesstif 库编译。还有更多地不幸是在一个 ELF 系统上的a.out 二进制炸弹有下面的错误消息:

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 libraries 的类似链接。这需要 root 完成,当然,值得注意的是你应该确保完全可靠,你要对现存在的二进制不覆盖或引起版本号冲突。幸运的是,新的 ELF 库有更高版本号,正好是预先想到的这个问题。

接下来创建这三个链接,xrolodex 运行非常好

xrolodex 包最初在 Spectro 公开,但在那里似乎消失了。它现在作为 tar.Z 源码格式文件 [512k] 从 Sunsite 下载。


Next Previous Contents