我在 Ubuntu 上使用多平台 EGL 应用程序,从 Ubuntu 16.10 升级到 17.04 后我无法再编译它。
问题是应用程序内部使用 Protocol Buffers 2.6.1,而 Mesa EGL ( /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so
) 依赖于 protobuf 3.0.0 ( /usr/lib/x86_64-linux-gnu/libprotobuf-lite.so.10
)。链接两个不同版本的 protobuf 库不起作用。
我无法更新应用程序以使用 protobuf 3.0.0,因为它不支持必需的特征。
据我所知,Mesa 的 protobuf 依赖项来自 Mir。我尝试了今天的 Ubuntu 17.10 每日映像,希望它能用 Wayland 替换 Mir,但依赖性仍然存在。Kubuntu 也是如此。
这曾经在 Ubuntu 16.10 上有效,因为默认的 protobuf 库是 2.6.1。没有可靠的方法可以降级到 16.10(当然,除非我从头开始重新安装)。
目前,我正在尝试使用 X11 而不是 Mir 重新编译 Mesa --with-egl-platforms=x11
。我不确定这是否会起作用。也许我需要使用 protobuf 2.6.1 重新编译 Mir,但我不知道会有什么副作用。
我的问题是:有没有更简单的解决方案/替代方案?
此外,像 Mir 这样的必备库对特定版本的 protobuf 施加严格的依赖关系是否正常?为什么默认的 Mir 包不附带静态链接的 protobuf,而这种依赖关系不会向想要使用 Mir 的客户端公开?我知道 Mir 开发已经停止(或者很快就会停止),但我仍然想了解他们为什么做出这个决定。
Chrome 也有同样的问题cr_
他们的解决方案是通过将前缀附加到内部 protobuf 库中的所有全局符号来同时链接两个不同的 protobuf 库。他们还指出,这种改变是一种黑客行为。