Arquivos .o Linux

1. Arquivos .o Linux

Leonardo Eufrazio Nogueira
leoeufrazio

(usa LMDE)

Enviado em 18/07/2017 - 16:04h

Boa Tarde.Caso a categoria esteja errada,por favor,avisem-me qual a correta.
Arquivos .o,também conhecidos como "object",servem para que?
Eles são gerados somente quando eu estou trabalhando com bibliotecas?
Eles seriam um arquivo executável?


  


2. Re: Arquivos .o Linux

Alberto Federman Neto.
albfneto

(usa Sabayon)

Enviado em 18/07/2017 - 17:58h

olha, aguarde mais respostas, pois não sou programador,

mas pelo que ví, os arquivos .o, objetos, não são legíveis.

são usados em C e C++ para compilar, por exemplo, módulos de kernel.

http://www.linuxforums.org/forum/kernel/14691-how-do-i-read-o-file.html
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, openSUSE, Mageia e OpenMandriva.


3. Re: Arquivos .o Linux

Perfil removido
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.