解決Ubuntu下缺少sys/time.h等標頭檔案的錯誤
阿新 • • 發佈:2019-02-06
最近學習過程中編輯程式碼時VIM 提示報錯:No matching function for call to “getitimer”(FixIt)。
Ubuntu 一般預設的C庫是在/usr/include/
目錄下,比如#include <unistd.h>
就是在/usr/include/
目錄下查詢unistd.h
檔案。
那麼回到出錯的問題上來,這是因為getitimer
函式是在/usr/include/sys/time.h
檔案宣告的。而我當前的Ubuntu
16.04系統中/usr/include/sys/
目錄下並沒有time.h
頭件,只有在/usr/include/
目錄下有一個time.h
標頭檔案,而這兩個time.h
sys/time.h
標頭檔案是linux系統專有的,而/usr/include/time.h
標頭檔案則是C 99庫的,是跨平臺的。
所以這個問題應該是開發環境沒有配置好的原因。那怎麼解決呢?
很簡單,只需要在終端中執行下面這條命令:
sudo apt-get install libc6-dev-amd64
輸入回車後提示以下資訊:
直接回車確認即可。
上面這條命令安裝了Ubuntu的開發環境需要的一個庫,同時安裝時也安裝了截圖中的幾個庫。執行完成後進入/usr/include/sys/
目錄發現多了很多連結檔案。
輸入
ls -l
結果如下:
可以看到time.h
../i386-linux-gnu/sys/time.h
下的連結檔案。 所以安裝
libc6-dev-amd64
時安裝的libc6:i386
的依賴庫才是解決這個問題的真正原因,驗證一下的方法是:
sudo apt-get autoremove libc6:i386
再進入/usr/include/sys/
目錄會發現僅剩一個原本就存在的asoundlib.h
標頭檔案。
重新執行本文的第一條命令可以將libc6:i386
重新安裝回來,或者單獨安裝libc6:i386
。