[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Sobre nomeação de pacotes de libs...



Em Sat, 5 Jul 2003 02:42:52 -0300, Ágney Lopes Roth Ferraz <agney@users.sourceforge.net> escreveu:

> André,

Hup!

> na verdade, as bibiotecas estao sendo migradas.
> explico melhor (pelo que entendi):
> as bilbiotecas estao sendo compiladas com o novo gcc (3.3) , e por motivos
> que desconheço (sou um aprendiz aqui) nao tem funcionamento identico as
> bibliotecas compiladas com o gcc antigo (2.95).

Deixa ver se esclareço isso (tentarei, mas corrijam-me se necessário =D):

Quando você linka um programa com uma biblioteca compartilhada, o acesso
às funções que a biblioteca 'exporta' é feita através dos 'símbolos', que
são representações das funções, variáveis, definições, etc.

Quando o programa é chamado, o ldso - que é o linkador de runtime -
carrega a biblioteca e aponta os ponteiros do programa para as posições
ocupadas pelos símbolos da lib na memória.

Acho que esse processo é executado usando endereços relativos ao início
da área de memória ocupada pela lib na pilha de execução. Quando a
ABI muda, os símbolos podem sofrer alterações de posição ou de forma de
chamada, mas como o programa tem os endereços da versão antiga da ABI vai
acabar apontando pra os lugares errados.

Exemplo:

void do_this (char *str);

Isso é um símbolo exportado por uma lib... vamos supor que o cara mude
essa função para ser:

int do_this (char **str);

Se ele não tiver mudado o soversion da lib, ela vai continuar tendo o
mesmo nome no sistema de arquivos, e os programas vão continuar tentando
acessá-la. Mas quando o programa chamar essa função: BOOM.

Notem que isso também é uma mudança de API, então o programa teria de
ser modificado, além de ser simplesmente compilado. Notem também que
esse exemplo provavelmente super-simplifica o problema.

O que aconteceu nesse caso do gcc é que a libstdc++, que é usada
por todos os programas escritos em C++ quebrou a compatibilidade de
ABI, quebrando a ABI, consequentemente, de todas as libs e programas
escritos em C++. Mas ninguém vai mudar o soversion, porque as libs
continuam com a ABI normal. Resultado: precisamos mudar os nomes dos
pacotes, pra garantir um upgrade sem problemas.

[]s!

-- 
kov@debian.org: Gustavo Noronha <http://people.debian.org/~kov>
Debian: <http://www.debian.org>  *  <http://www.debian-br.org>
Dúvidas sobre o Debian? Visite o Rau-Tu: http://rautu.cipsga.org.br



Reply to: