/usr/bin/ld: cannot find -lX11解決方案

來源:互聯網
上載者:User

編譯代碼的時候連結階段出現了問題,/usr/bin/ld: cannot find -lX11,看到這個資訊時心裡很是納悶,在/usr/lib/路徑下明明有libX11.so.6,為什麼沒有連結到呢,再三思索,最後想起-lX11其實代表的是全名是libX11.so,而/usr/lib/下確實沒有這個檔案,如果你不寫-lX11,而是寫/usr/lib/libX11.so.6,那麼連結的時候連結器會準確的找到動態庫。

其實.so結尾的檔案應該是安裝了開發庫的話才會有的,平常我們安裝軟體其實下載的只是標頭檔,只供一般使用,所以出現這個錯誤在我的電腦中是因為沒有安裝開發庫,執行

yum install libX11-devel.i686

安裝完畢後程式連結成功,讓我們再回到/usr/lib庫看看,安裝過後你會發現確實多了.so結尾的動態庫,用ls -l /usr/lib/libX11.so顯示

lrwxrwxrwx 1 root root 15 2月  28 11:08 /usr/lib/libX11.so -> libX11.so.6.3.0

其實它是個符號串連,指向本路徑中的libX11.so.6.3.0。

再看看編譯出的二進位檔案依賴哪些動態庫,執行ldd XXXXX

    linux-gate.so.1 =>  (0xb77d1000)
    libX11.so.6 => /lib/libX11.so.6 (0x43dde000)
    libncurses.so.5 => ./lib/libncurses.so.5 (0x4702a000)

可執行檔真正載入的是/lib/libX11.so.6,不是/usr/lib/libX11.so.6.3.0,很奇怪,不過讓我們再看看/lib/libX11.so.6到底是什麼,執行

ls -l /lib/libX11.so.6
輸出 lrwxrwxrwx 1 root root 15 2月  28 03:07 /lib/libX11.so.6 -> libX11.so.6.3.0
原來它也是串連檔案,與libX11.so指向不同路徑下的同一個檔案。

所以以後當你遇到這種情況,首先確定自己是否安裝了開發庫,然後看看版本對不對,這裡面的符號串連是不是都是指向同一個動態庫的。如果有問題一定是這3個原因中的一個。

1 系統沒有安裝相對應的lib
2 相對應的lib版本不對
3 lib(.so檔)的symbolic link 不正確,沒有連結到正確的函式庫檔案(.so)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.