Desde sus primeras versiones, Linux soporta los binarios en formato a.out. Recientemente, el soporte para los binarios en el formato ELF ha sido integrado en el núcleo y se ha hecho una distribución de las bibliotecas compartidas en formato ELF. Las ventajas de este formato en relación al formato a.out son muchas:
dlopen()
, dlsym()
y
dlclose()
Las ultimas versiones de las distribuciones están basadas en el formato ELF. Si su máquina todavía está en formato a.out, ya es hora de reinstalar su máquina con una distribución de Linux actualizada.
.
Las nuevas versiones del compilador y de las utilidades generan
ejecutables en formato ELF, por defecto. Es posible crear ejecutables en
formato a.out utilizando la opción -b i486-linuxaout
al llamar a
gcc.
Desde ahora es fácil construir bibliotecas dinámicas. Los archivos fuente
deben ser compilados con la opción -fPIC
con el fin que el código
generado pueda ser ejecutado en cualquier dirección (las bibliotecas dinámicas
se cargan en direcciones imprevisibles y su código debe ser independiente de
su dirección física). La opción -shared
de gcc permite luego generar
una biblioteca dinámica.
Por ejemplo para generar una biblioteca libtruc.so.1.0
se utilizarían las
siguientes órdenes:
$ gcc -c -fPIC *.c $ gcc -shared -Wl,-soname,libtruc.so.1 -o libtruc.so.1.0 *.o
Algunos documentos sobre ELF están disponibles en ftp.lip6.fr
en
/pub/linux/ELF/doc
. Se trata de :
ELF.doc.tar.gz
la especificación del formato ELFELF.ps.gz
un artículo de H.J. Lu donde describe la implementación del
formato ELF en Linuxmove_to_elf.gz
una descripción de la transición entre formatos a.out y ELF.