在我上次对我的测试 debian 系统进行 dist-upgrade 后,X 拒绝启动。我可以看到以下错误(在 gnome-session 启动时显示):
符号查找错误:/usr/lib/i386-linux-gnu/libcairo.so.2:未定义符号:glXGetProcAddress
此外,即使是 texlive 也拒绝升级,并出现同样的错误(由 luatex 引起)。
我不知道如何解决这个问题:是否有可能缺少一个重要的库?如果不是,还有什么可能导致这个问题?
答案1
@彼得夫的回答非常接近问题。
显卡是 Matrox G550 (mga),但过去安装的是 nvidia,一些 glx 的东西仍然保留在/usr/lib/tls
.
我没有使用 mga 驱动程序的经验,但我的理解是没有专有的 glx 实现,所以我们继续尝试让台面工作。
安装后libgl1-mesa-glx
,glx-alternative-mesa
我们检查libcairo
了ldd
,然后使用dpkg -S
完整路径来了解从哪些包中选择libGL
并libGLcore
解析了ldd
,只是为了检查那是台面,这两个库都不在任何包中。
将这些库移开,这次ldd
显示使用了正确的台面库,此时我要求 @zar 再次检查,他的答案是这次apt-get -f install
正确完成并gdm3
运行没有错误。
即使是一个错误,我认为我们也无法满足任何错误请求,因为非 debianized nvidia 驱动程序破坏了合同。
专有驱动程序安装仍然邪恶的,我不明白为什么他们喜欢自己的垃圾,supposed-to-install-everywhere.run
而不是至少与主要发行版寻求一些合作(这可能是免费/免费的)。
答案2
该错误意味着您的 Cairo 安装缺少运行时链接依赖项 - 从符号名称判断,它是丢失/损坏的 OpenGL 实现包(可能是 Mesa)。重新安装 Cairo 可能会有所帮助,前提是包管理器修复了包依赖关系(这可能是导致错误的原因),并安装了所有缺少的先决条件。
您还可以运行ldd /usr/lib/i386-linux-gnu/libcairo.so.2
并检查包含=> not found
- 的行,这将告诉您系统上缺少哪个库,搜索包含它的包并(重新)安装它。
这也是更新依赖包而不更新其依赖项的情况的典型综合症(例如,使用专有驱动程序很容易发生这种情况 - 事实证明这里就是这种情况)。
答案3
在 RH 命名法中:(我也不知道 Debian 打包格式)
我尝试了一下,发现了以下内容:
# sudo **'yum whatprovides /usr/lib/libGL.so.1'**
产量:*mesa-libGL-9.2.5-1.20131220.fc20.i686 : Mesa libGL runtime libraries and DRI drivers*
A、
ldd
印刷品共享对象库依赖项,所以它不是完成这项工作的工具,除非链接出现问题。我什么也没找到。
我看了真的很难并发现这个问题
2. 剩下的就很简单了:
# nm -D /usr/lib/libGL.so.1 |grep 'glXGetProcAddress'
00014310 T glXGetProcAddress
00014310 T glXGetProcAddressARB
3.我得到了Adobe阅读器追赶这个。
答案4
Gnome
是根据库编写的,GTK+ library
它取决于cairo
库,cairo library
您升级时发生的,请re-install
它,而不是从本地,请重新下载它。使用apt-cache
并搜索每个cairo packages