Estática e dinâmica que liga a mesma biblioteca
-
11-09-2019 - |
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
?
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.