BBS水木清华站∶精华区

发信人:  shawn@skydome.hinet.net (Shawn Hsiao), 信区: linux 
标  题:  Re: ELF 
发信站:  Private site running Linux (Tue Mar  7 04:22:45 1995) 
转信站: 
 
==>Benjamin Chen (dagger.bbs@csie.nctu.edu.tw) wrote: 
     1. Linux kernel 1.1 的第几个 patch 开始的 ELF 才可信任? 
 
大约在 1.1.6x 後的就可以了. 
 
     2. ELF 将来会取代 static shared library 吗? 
                       ^^^^^^^^^^^^^^^^^^^^^ 
                       我假设你想问的是 libraries for dynamic linked 跟 
                       libraries for static linked. 
 
Probably. 原有 a.out 的 users 太多了, 目前没有好的方法代换掉. 
不少人已经提议要将 ELF 变成 Linux 标准的 binary format, 甚至连原本欠缺 
的 core dump/debug 部份都写好了, 只差 distribution (如 Slackware) 的配合. 
 
PS. 去年曾经在 Debian 0.93R1 发出前提过, 将 Debian 变成第一个全 ELF 的 
distribution, 不过 Debian 的主要干部坚决反对, 目前游说目标指向 Bogus. 
 
     3. ELF 是否会为执行中的程式节省 RAM 的使用? 
 
使用 ELF 最大的好处是可以使 dynamic linked library 的制造变得容易 (implies 
混乱?), 因此, 可以节省部份记忆体 (不是很有关系, 但是会有作用). 
 
还有其它好处, 我曾经 demo 给 wycc 看过, 我想他也开始换 ELF 了. 
 
     4. 现在是不是植入 ELF 的良机? 
 
我认为还不是. 除非你有自己动手 build 大部份 utilities 的时间. (我连 XFree86 
3.1.1 都是自己 build 的.  8~~~) 
 
     5. 假设我写了个需用上 curses 的程式, 并且想将之编译成 
        ELF 的格式; 然而, 系统内所安装的 curses 程式库只有 
        一份 static shared library 及一份 static library. 
        请问可能吗?  是不是 curses 也非得有 ELF 格式的 
        library 才可以? 
 
那是当然. 
 
     6. 若想发展自己的 ELF 格式的 library, 是不是也要像 static 
                                                        ^^^^^^ 
        shared library 一样麻烦? 
        ^^^^^^^^^^^^^^ 
        我假设你想问的是 a.out 的 shared libraries. 
 
不是, 简单多了. 
 
 
     7. 有为 ELF 而订制的 gcc, 那 gdb 是否也要更新? 
 
如果使用 Cygnus 的版本, 就不需要再更新. ELF 在 Linux 上的使用, Cygnus 
也出了不少力. 
 
     8. 是不是大部份使用 static shared library 的软体都可以 
                         ^^^^^^^^^^^^^^^^^^^^^ 
                         假设同 (6) 
        轻易地更改而去用 ELF library? 
 
不是, 两者为不同系统, 不能相容. 
 
     9. 您使用 ELF 後的经验与感想? 这是我最渴望知道的. :-) 
 
如果你有使用大 package 的机会, ELF 也许是非常适合你. 
 
前一阵子帮忙处理 Modula-3 for LINUXELF 的一部份, 得到的效果另人非常满意. 
原本 Modula-3 的 package 在传统 a.out 的 binary format 下只能做 static 
link, 使得 binary 的大小居高不下, load time 很长, 占的 storage 也很多. 
硬要将一部份抽出制成 shared libraries 的话, 却会有混乱的问题. (目前 ELF 
也有一点点混乱, 因为我们还没有达成共识. ELF 的使用者数量太少是一个障碍.) 
改用 ELF 後, 将一部份大於 500KB 的 libraries 抽出制为为 shared libraries, 
整体表现就提升很多了. 
 
我底下举一个不是很好的例子, 主要是要比较多了几个 shared libraries 之後的 
档案大小. (处理 tetris.shared 这个档案的方式, 就是原本在 a.out 上的方式.) 
原本应该还要测 load time, 但是因为没有对照组, 再加上没有适当的 program, 
所以只好省略. 
 
目前 Modula-3 for Linux 的 distribution 我看还是以 a.out 为主, 但越来越 
多人会倾向使用 ELF, 只要光看档案大小就够了. 
 
-rwxr-xr-x   1 root     root       923039 Feb 15  1995 libm3core.so.1.1.1 
-rwxr-xr-x   1 root     root      1866111 Feb 15  1995 libm3.so.1.1.1 
 
-rwxr-xr-x   1 shawn    users      148531 Mar  7 03:37 tetris 
-rwxr-xr-x   1 shawn    users     1214545 Mar  7 03:41 tetris.shared 
-rwxr-xr-x   1 shawn    users     2267301 Mar  7 03:33 tetris.standalone 
 
tetris: 
======= 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libm3.so.1 
                                                        ^^^^^^^^^^ 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libm3core.so.1 
                                                        ^^^^^^^^^^^^^^ 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libXaw.so.6 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libXmu.so.6 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libXext.so.6 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libXt.so.6 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libX11.so.6 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libSM.so.6 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libICE.so.6 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libm.so.4 
Linux ELF dynamic linker: tetris: file loaded: /lib/elf/libc.so.4 
 
tetris.shared: 
============== 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libXaw.so.6 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libXmu.so.6 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libXext.so.6 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libXt.so.6 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libX11.so.6 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libSM.so.6 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libICE.so.6 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libm.so.4 
Linux ELF dynamic linker: tetris.shared: file loaded: /lib/elf/libc.so.4 
 
tetris.standalone: 
================== 
        statically linked (ELF) 
 
 
 

BBS水木清华站∶精华区