removido
(usa Nenhuma)
Enviado em 18/07/2017 - 21:17h
Eu já dei uma cutucada nesta dúvida porque num outro tópico referiram-se a arquivos .o do tipo objetos como sendo bibliotecas.
O pessoal do tópico possui mais autoridade que eu sobre estas coisas, mas ninguém retornou. >< Fiquei na dúvida, porque era uma explicação alternativa de um treco que desde sempre eu dava como certo.
Eu sei o que é, aprendi na prática, vi como funciona, também perguntei muito tempo depois para um professor na faculdade, inclusive foi uma das poucas coisas que realmente aprendi durante a estadia na instituição (estou me excedendo).
Não sei explicar. Em todos estes anos nesta indústria vital, uma das primeiras coisas que aprendi, eu não sei explicar. Refiro-me a décadas. Não sei explicar.
As explicações da internet não explicam direito. Vou arriscar. Que apareça alguém a corrigir-me desta vez!
Arquivos objeto possuem referências a endereços de memória de onde seriam as variáveis usadas, como que uma conversão nome-endereço. Possuem referências a valores constantes, como strings, ints e floats declarados na construção do código. Possuem espaços organizados com os valores constantes declarados como arrays. Possuem a organização de instruções que apontam para outros trechos do código que a execução deve-se dirigir no fluxo. Possuem o indicativo de onde se deve inserir o verdadeiro código que realizará o que o programa se propõe a fazer.
Tem uma etapa da construção do binário chamada linkedição. Não sei explicar. O linkeditor resolve o que falta para ser um executável. Ele associa o programa com as verdadeiras bibliotecas, como libc e libmath. Há linkagem dinâmica, onde a biblioteca é consultada para ver o que será executado e há a linkagem estática, onde o conteúdo da biblioteca é inserido no programa final, de modo que ele seja mais independente.
Em Linux, bibliotecas costumam ter extensão .so e .a. Em Windows© você as chamaria de DLLs.
Um comando usado para ver que bibliotecas um executável, com sua respectiva saída, seria
$ ldd /bin/bash
linux-vdso.so.1 (0x00007ffd13588000)
libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007fe7d85d8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe7d83d4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe7d8035000)
/lib64/ld-linux-x86-64.so.2 (0x000055834c7e8000)
Vou pensar um pouco numa coisa melhor para melhorar ou corrigir esta explicação. Veja se ela ajuda na pesquisa de alguma coisa no Google.