原始碼編譯時有錯誤出現在 linux 下是很正常的事,關鍵是要懂得檢視錯誤資訊。一般 linux 下的錯誤主要是由路徑、許可權、鏈結庫造成的,可以針對這些內容進行篩選,找出出錯的原因並加以解決。
對於編譯一些時間長,輸出多的庫或程式,可以使用 make 2>&1 | tee build.log 來在檔案和控制台同時輸出 標準輸出、標準錯誤輸出
然後在log日誌檔案中直接搜尋/error /error /abort 檢視錯誤資訊
make 2>&1 | tee build.log 求解釋
問題1: 2 , &1 表示什麼意思
問題2: 和 make > build.log 有什麼區別嗎
問題1:表示的是檔案描述符。0 stdin,1 stdout,2 stderr 2>&1,表示標準錯誤重定向到標準輸出
問題2:作用上沒有區別,後者是把make的所有輸出都重定向到檔案build.log當中
1. 如果沒有2>&1,只會有標準輸出,沒有錯誤;
2. tee的作用同時輸出到控制台和檔案
報錯: undefine reference ***變數或函式
原因基本上是找不到相關的lib庫檔案,要麼是機器上沒有該庫檔案,要麼是環境變數沒有配置好,無法連線到該檔案。
可以嘗試如下命令
find . -type f -exec grep -ho nc_get_vars {} \; | uniq
作用是:在當前目錄下的所有檔案裡找變數nc_get_vars並輸出檔名
有特殊符號的如:udunits.h 需要用雙引號 「udunits.h」 包含起來
一般會找到 configure 檔案中連線該lib檔案的變數,或是直接找到原始碼檔案
如果是找不到檔案
可以用
find . -name "udunits.h"
來檢查是在當前目錄下有該檔案
ubuntu系統可以通過
apt-cache search udunits
查詢是否在軟體源中含有該庫 一些編譯錯誤及解決方法《記錄》
初學c 程式設計時,總會遇到這樣那樣的錯誤。因此,總結一些經常遇到的編譯錯誤及解決方法,方便自己和他人,不定期更新中 relocation r x86 64 32 against rodata can not be used when a shared object recompile with f...
SQLite第三課 原始碼編譯錯誤以及解決
1 fts2 has a designflaw and has been deprecated 2 fts1 has a designflaw and has been deprecated 解決方案 解析 fts1和fts2都有設計的缺陷,現在已經被廢棄,目前已經提供了fts3或者fts4,這些作...
一些常見錯誤 技巧 結論總結
會把考試 做題時犯得不太容易發現的錯誤記錄下.1.在 trie 圖 trs 圖上亂搞時,注意可能需要把 fail 樹 parent 樹中節點的貢獻傳遞給子樹 2.斜率優化 dp 尤其注意別把 i,j 打反了!3.空間不要開小了!線段樹4倍,sam 2倍,dfs 序2倍,鄰接表2倍 4.某種情況不合法...