在obs 原始碼列印日誌,但是編譯後未列印的問題分析

2021-10-08 03:12:56 字數 867 閱讀 6424

在一次分析obs原始碼過程中,遇到了這樣乙個問題,我在原始碼中列印了日誌,但是編譯後的產物卻跟未改動一樣。

初步懷疑是因為編譯產物沒有刪除乾淨,或者cmake的鎖導致沒有編譯到該檔案,於是刪除了構建目錄,從原始碼重新執行cmake和make, 然後執行程式,發現我的改動依然沒有生效。

故意在該檔案產生乙個語法錯誤,再次編譯,發現編譯失敗,這樣就可以排除未被編譯的錯誤了,那麼就只能是編譯了,但是沒有使用到。這種應該就是編譯成.so檔案了。

再次使用strings 命令檢查字串,並用grep 過濾我加上的日誌字串,發現沒有搜尋到,這樣就更進一步確認了這個檔案編譯在.so檔案裡面。

使用find 搜尋編譯目錄所有的.so, 找到乙個名稱和.c檔名稱很相近的檔案, 使用ldd列印鏈結檔案列表,未發現到該檔案。

對該so檔案使用nm -c ,並用grep過濾修改的函式名,果然查詢到了對應的函式名符號。

對可執行檔案使用ldd命,並grep過濾剛剛查詢到的so檔名,但是奇怪的是未發現該.so檔案。

猜測是使用了執行時載入的技術,程式會在執行時,動態判斷應該呼叫哪個.so檔案。

於是將程式執行起來,使用pidof 《程式名》 找到對應pid,然後使用lsof -p | grep 其實問題已經很清楚了,我編譯的so檔案在我的構建目錄下面,但是真正鏈結的卻在系統路徑下面,導致我無論怎麼改變都無濟於事。

這個問題原因我猜是我之前使用系統包管理器安裝過該軟體,現在使用原始碼構建,但是會優先拉系統目錄的庫,導致了這個bug。

OBS原始碼編譯開發

obs簡介 官方有較詳細的說明文件,但是在實際編譯開發過程中,還是遇到了一些問題。在此記錄下來,以備查閱。obs編譯 windows 準備生成工程 add entry增加依賴庫,qt路徑等,如下 編譯工程 想除錯可以使用debug或者relwithdebinfo執行程式。程式編譯完成,可以執行d o...

OBS原始碼編譯開發

obs簡介 官方有較詳細的說明文件,但是在實際編譯開發過程中,還是遇到了一些問題。在此記錄下來,以備查閱。obs編譯 windows 準備生成工程 add entry增加依賴庫,qt路徑等,如下 編譯工程 想除錯可以使用debug或者relwithdebinfo執行程式。程式編譯完成,可以執行d o...

OBS原始碼編譯開發

obs簡介 官方有較詳細的說明文件,但是在實際編譯開發過程中,還是遇到了一些問題。在此記錄下來,以備查閱。obs編譯 windows 準備生成工程 add entry增加依賴庫,qt路徑等,如下 編譯工程 想除錯可以使用debug或者relwithdebinfo執行程式。程式編譯完成,可以執行d o...