Dependências entre bibliotecas compartilhadas nos mesmos pacotes Debian

2

Suponha que eu queira criar um pacote com várias bibliotecas compartilhadas - chame-o de libfoo , que contém liba.so.1 e libb.so.1 . Agora, digamos que liba.so.1 usa um símbolo de libb.so.1 . Se eu compilar assim, então está tudo bem:

cc   -shared -fPIC -Wl,-soname,libb.so.1 -o libb.so.1 libb.c
cc   -shared -fPIC -Wl,-soname,liba.so.1 -o liba.so.1 liba.c libb.so.1

No entanto, isso requer algum trabalho extra (eu tenho que descobrir manualmente as dependências e codificá-las no meu makefile, e o scons não parece fazer isso automaticamente). Compilar a maneira fácil cria um problema interessante:

cc   -shared -fPIC -Wl,-soname,libb.so.1 -o libb.so.1 libb.c
cc   -shared -fPIC -Wl,-soname,liba.so.1 -o liba.so.1 liba.c

Agora, liba.so.1 não tem libb.so.1 no cabeçalho DT_NEEDED (visível usando objdump -p ) e, ao criar um pacote debian, recebo a seguinte mensagem (e essa etapa demora MUITO mais):

dh_shlibdeps
   dpkg-shlibdeps: warning: symbol b used by debian/libfoo1/usr/lib/liba.so.1 found in none of the libraries.

Isso acontece porque o símbolo b está definido em libb.so.1 , mas dpkg-shlibdeps não tem como saber isso.

Devo observar que não parece haver um problema real aqui - o binário real tem liba e libb como DT_NEEDED , e ambos são carregados em tempo de execução ... foram por anos. Este problema só surgiu quando tentamos criar um pacote Debian correto e de construção limpa.

Como devo resolver isso? ( devo eu resolver isso?) As bibliotecas devem realmente (TM) estar no mesmo pacote debian. (Para pontos de bônus, resolva dependências circulares, ou seja, libb também usa um símbolo de liba ).

    
por lutzky 15.11.2011 / 23:03

0 respostas