combinar dois arquivos de object .o GCC compilados em um terceiro arquivo .o

Como combinar dois arquivos de objects .o GCC compilados em um terceiro arquivo .o?

$ gcc -c ac -o ao $ gcc -c bc -o bo $ ??? ao bo -o co $ gcc co other.o -o executable 

Se você tiver access aos arquivos de origem, o -combine GCC irá mesclar os arquivos de origem antes da compilation:

 $ gcc -c -combine ac bc -o co 

No entanto, isso só funciona para arquivos de origem, e o GCC não aceita arquivos .o como input para esse comando.

Normalmente, a vinculação de arquivos .o não funciona corretamente, pois você não pode usar a saída do vinculador como input para ele. O resultado é uma biblioteca compartilhada e não está vinculado estaticamente ao executável resultante.

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

Passar -r (ou --relocatable ) para ld criará um object que seja adequado como input de ld .

 $ ld -r ao bo -o co $ gcc co other.o -o executable $ ./executable 

O arquivo gerado é do mesmo tipo que os arquivos originais.

 $ file ao ao: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped $ file co co: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped 

Se você quiser criar um arquivo de dois ou mais arquivos .o (ou seja, uma biblioteca estática), use o comando ar :

 ar rvs mylib.a file1.o file2.o 
Intereting Posts