Estou usando um aplicativo EGL de plataforma múltipla no Ubuntu e não posso mais compilá-lo após a atualização do Ubuntu 16.10 para 17.04.
O problema é que o aplicativo usa Protocol Buffers 2.6.1 internamente e o Mesa EGL ( /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so
) depende do protobuf 3.0.0 ( /usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.10
). Vincular duas versões diferentes da biblioteca protobuf não funciona.
Não consigo atualizar o aplicativo para usar o protobuf 3.0.0 porque ele não suporta um recurso .
Pelo que eu vi, a dependência do protobuf de Mesa vem da Mir. Eu tentei a imagem diária de hoje do Ubuntu 17.10, esperando substituir o Mir pelo Wayland, mas a dependência ainda está lá. O mesmo para o Kubuntu.
Isso costumava funcionar no Ubuntu 16.10 porque a biblioteca padrão do protobuf era a 2.6.1. Não há uma maneira robusta de fazer o downgrade para 16.10 (a menos que eu reinstale do zero, é claro).
Atualmente, estou tentando recompilar o Mesa com o X11 em vez do Mir, usando --with-egl-platforms=x11
. Não tenho certeza se isso vai funcionar. Talvez precise recompilar o Mir usando o protobuf 2.6.1, mas não sei quais serão os efeitos colaterais.
Minha pergunta é: existe uma solução / alternativa mais fácil?
Além disso, é normal que uma biblioteca essencial como a Mir imponha uma dependência estrita de uma versão específica do protobuf? Por que o pacote padrão do Mir não vem com um protobuf vinculado estaticamente que não exponha essa dependência a clientes que desejam usar o Mir? Eu sei que o desenvolvimento do Mir já está descontinuado (ou será em breve), mas eu ainda gostaria de entender por que eles tomaram essa decisão.
O Chrome teve o mesmo problema e sua solução foi vincular duas bibliotecas protobuf diferentes ao mesmo tempo, anexando o prefixo cr_
a todos os símbolos globais na biblioteca interna de protobufs. Eles também notam que essa mudança é um hack.