gcc compiler-construction linker ld object-files

combinar dos archivos de objeto.o compilados por GCC en un tercer archivo.o



compiler-construction linker (2)

¿Cómo se combinan dos archivos de objeto .o compilados por GCC en un tercer archivo .o?

$ gcc -c a.c -o a.o $ gcc -c b.c -o b.o $ ??? a.o b.o -o c.o $ gcc c.o other.o -o executable

Si tiene acceso a los archivos fuente, la -combine combinar el indicador GCC fusionará los archivos fuente antes de la compilación:

$ gcc -c -combine a.c b.c -o c.o

Sin embargo, esto solo funciona para los archivos fuente, y GCC no acepta archivos .o como entrada para este comando.

Normalmente, vincular archivos .o no funciona correctamente, ya que no puede usar el resultado del vinculador como entrada para él. El resultado es una biblioteca compartida y no está vinculado estáticamente en el ejecutable resultante.

$ gcc -shared a.o b.o -o c.o $ gcc c.o other.o -o executable $ ./executable ./executable: error while loading shared libraries: c.o: cannot open shared object file: No such file or directory $ file c.o c.o: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not stripped $ file a.o a.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped


Al pasar -r (o --relocatable ) a ld se creará un objeto que sea adecuado como entrada de ld .

$ ld -r a.o b.o -o c.o $ gcc c.o other.o -o executable $ ./executable

El archivo generado es del mismo tipo que los archivos .o originales.

$ file a.o a.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped $ file c.o c.o: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped


Si desea crear un archivo de dos o más archivos .o (es decir, una biblioteca estática) use el comando ar :

ar rvs mylib.a file1.o file2.o