Pergunta

Eu tenho um programa que é estaticamente vincular a uma biblioteca (libA.2.0.a) e também vincula dinamicamente para outra biblioteca (libB.so). libB.so também dinamicamente links para uma versão mais antiga da Liba (libA.1.0.so).

É este configuração possível? E se assim for, como é que o know sistema para usar os símbolos de libA.2.0.a para o meu programa e os símbolos de libA.1.0.so para libB.so?

Foi útil?

Solução

Sim, esta configuração é possível.

Em resposta à sua pergunta sobre a forma como o sistema sabe como usar os símbolos, lembre-se de que todas as ligações acontecer em tempo de compilação. Depois de ter sido construído, não é uma questão de "símbolos", apenas chama a várias funções em vários endereços.

Ao construir libB.so, ele define-se É links para libA.1.0.so. Ele não sabe ou cuidado que outras aplicações que utilizam ele vai fazer, ele só sabe como mapear suas próprias chamadas de função.

Ao construir o próprio aplicativo, o aplicativo links para libB.so. Seja qual for libB.so chama é completamente desconhecido para o aplicativo. O aplicativo também estaticamente links para uma biblioteca, que libB.so não se preocupa.

Uma pegadinha: se Liba usa variáveis ??estáticas, haverá um conjunto de estática acessíveis a libB.so, e um conjunto independente diferente da estática acessíveis ao aplicativo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top