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:
- La compatibilidad con los sistemas UNIX basados en SVR4
- mayor facilidad de creación de bibliotecas compartidas
- edición de enlaces dinámicos durante la ejecución de los programas
- soporta las funciones 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.
U
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 ELF
- ELF.ps.gz un artículo de H.J. Lu donde describe la implementación del formato ELF en Linux
- move_to_elf.gz una descripción de la transición entre formatos a.out y ELF.
También es posible aprender más sobre ELF en estas URL: