1. 程式人生 > >libm.so.6:no such file or directory

libm.so.6:no such file or directory

最近幾天一直在弄qemu方針integratorcp開發板,遇到了很多問題,其中一個就是這個。

出現這種錯誤,一般肯定是首先檢查庫是否存在,是否在檔案搜尋路徑中。

我出現這個錯誤的情況可能有點不一樣,是在系統啟動過程中提示的,由於該錯誤,系統未啟動成功,init程序被殺死,但核心已經啟動完成。

檢視/lib目錄,發現libm.so.6檔案存在,是個連結檔案,指向libm-2.17.so然後就一直納悶兒,那是什麼原因導致init程序無法啟動,提示找不到libm庫呢?

負責查詢庫的程式是ld-linux.so.3,問題就出在該檔案上。由於在init程序啟動前,需要載入相應的動態庫,動態庫的載入和初始化任務都是由ld-linux.so.3來完成,而此時由於init程序還未啟動,所以新增的環境變數全部無效,只有預設環境變數有效,即正常情況下預設庫搜尋路徑應該為
/lib:/usr/lib。但實際上,正是由於預設庫搜尋路徑有誤,所以才導致lib目錄下明明存在libm.so.6檔案,ld-linux.so任然提示“No such file or directory”。

出現該問題的原因:ld-linux.so.3檔案有問題,預設庫搜尋路徑應該是上面提到的兩個目錄。

解決辦法:重新編譯glibc。找到elf/Makefile檔案,定位到"gen_trusted_dirs.awk"上一行,修改為"echo '/lib:/usr/lib'"

問題追蹤:ld-linux.so.3->_dl_map_object(elf/dl-load.c)->SYSTEM_DIRS(elf/trusted_dirs.h)->elf/Makefile