Usando o Mesa EGL com a versão personalizada de protobuf

3

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.

    
por Anthony K 14.07.2017 / 04:42

0 respostas