Como posso construir minha biblioteca compartilhada (.so) para que os símbolos de uma biblioteca compartilhada diferente também sejam incluídos? [fechadas]

0

Minha biblioteca compartilhada libnew.so usa alguns símbolos de uma biblioteca compartilhada de terceiros já construída libold.so . Gostaria de criar um arquivo binário executável que deve ser vinculado somente a libnew.so . Mas ainda precisa estar vinculado a libold.so também. Caso contrário, o vinculador reclama sobre undefined reference to symbol... .

Eu usei esses comandos para criar libnew.so e o arquivo executável. Por alguma razão, só é permitido usar o diretório atual e não posso colocar meus arquivos em outro lugar.

Btw, nm libnew.so mostra símbolos de libold.so como indefinidos. ldd libnew.so também não reporta libold.so . Se eu não usar libold.so para construir libnew.so , o tamanho de libnew.so não será alterado!

Para libnew.so:

gcc -Wall -fPIC -c libnew.c
gcc -shared -Wl,-soname,libnew.so.1 -o libnew.so.1.0 *.o -L. -lold
ln -sf libnew.so.1.0 libnew.so.1
ln -sf libnew.so.1.0 libnew.so

Para o executável:

#this does not work and needs -lold as well.
gcc -Wall main.c -L. -lnew -o prog

Há algo faltando? Obrigado!

    
por askman 06.09.2016 / 23:12

1 resposta

1

O que falta é que o seu comando linker

gcc -shared -Wl,-soname,libnew.so.1 -o libnew.so.1.0 *.o -L. -lold

não copia objetos de libold.so , mas refere-se a símbolos nesse arquivo para informar ao carregador dinâmico onde ele pode obter esses símbolos.

Normalmente, quando alguém está tentando suprimir / ocultar uma determinada biblioteca, eles começam recombinando os arquivos-objeto que foram usados para criar a biblioteca compartilhada. Você pode ser capaz de realizar isso via link parcial , mas eu não vejo uma solução (já que bibliotecas compartilhadas e objetos compartilhados não são intercambiáveis).

Leitura adicional:

por 07.09.2016 / 01:28

Tags