在我上次對我的測試 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