2013年5月17日 星期五

解決「Chrome 因缺 libudev.so.0 而不能開啟」問題

將 Fedora 18 的系統核心更新到 kernel 3.9.2-200 後,驅動程式也都更新或重新編譯。重新開機後,一切似乎很順利;突然發現,Chrome 不能開啟,點選程式選單似乎都沒反應。
  為查詢錯誤訊息,從「終端機」下命令開啟 Chrome,如果有任何錯誤訊息,就會顯示些線索。
[SiB@Celeron-D ~]$ google-chrome
/usr/bin/google-chrome: error while loading shared libraries: libudev.so.0: cannot open shared object file: No such file or directory
似乎是 libudev.so.0 這個「動態函式庫」不能載入,先切換成 root 身份,再用 whereis 這個命令查一下這個檔案的目錄位置。
[root@Celeron-D ~]# whereis libudev.so.0
libudev.so: /lib64/libudev.so.1 /usr/lib64/libudev.so.1
可看到有兩個版本數字不同的檔案,分別位在 /lib64/ 及 /usr/lib64/ 這兩個目錄。這裡分兩點來說明:
  • /lib64/ 是一鏈結,指向 /usr/lib64/ 這個真實目錄,並不是存在兩份檔案。
  • libudev.so.0 應該是 Chrome 編譯時使用的版本,而 libudev.so.1 是較新的版本,但是有著不同的版本編號
就切換到 /usr/lib64/ 這個目錄,再查詢一下有否類似名稱的檔案。
[root@Celeron-D ~]# cd /usr/lib64/
[root@Celeron-D lib64]# ll libudev*
lrwxrwxrwx. 1 root root    16  5? 17 21:38 libudev.so.1 -> libudev.so.1.3.2
-rwxr-xr-x. 1 root root 69704  5?  7 16:58 libudev.so.1.3.2
又看到兩個檔案:libudev.so.1 和 libudev.so.1.3.2,第一個檔名的『->』是顯示鏈結所指向的目錄。這種用『鏈結』方式改變檔案,在類 Unix 系統中非常常用,可以讓程式不會因「動態函式庫」的版本編號小改變,而立即造成執行的問題。但是,上面的查詢結果並未發現 libudev.so.0 這個檔案。
  通常,在類 Unix 的系統中,多會考慮版本相容的問題。因此,預設使用 libudev.so.0 的程式若改用 libudev.so.1 應該不會出問題才對。一樣用『鏈結』的方式修改檔名,有兩種改法:
  • 建立一個鏈結到 libudev.so.1 的新鏈結
    [root@Celeron-D lib64]# ln -s libudev.so.1 libudev.so.0
  • 建立一個鏈結到 libudev.so.1.3.2 的新鏈結
    [root@Celeron-D lib64]# ln -s libudev.so.1.3.2 libudev.so.0

已測試版本:

  • Fedora: 18 (kernel 3.8.11-200, 3.9.2-200)
  • Chrome: 26.0.1410.63

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)