假如您沒(méi)有應(yīng)用程序的源代碼并且由于 C 的 GNU 庫(kù)(glibc)函數(shù)正將某些錯(cuò)誤信息返回給該應(yīng)用程序而使它失敗,那么您該怎么辦? 因?yàn)?glibc 是開(kāi)放源碼,所以您當(dāng)然可以獲得其源代碼、對(duì)它進(jìn)行更改、重新構(gòu)建和安裝。 然而,這不適合那些膽怯的人,因?yàn)殡m然 API 有很好的文檔說(shuō)明,但 GNU C 庫(kù)的內(nèi)部組織卻沒(méi)有。 查找正確的函數(shù)原型只是眾多挑戰(zhàn)中的第一個(gè)。 它還是一個(gè)很大的包,所以第一次編譯時(shí),它將花一些時(shí)間(glibc 2.2.2 有 8552 個(gè)文件和 1775440 行代碼,包括注釋)。
結(jié)束語(yǔ) 編寫(xiě) GNU C 庫(kù)函數(shù)的專用版本是調(diào)試系統(tǒng)問(wèn)題或進(jìn)行快速修正的好方法。 使用 LD_PRELOAD shell 變量,可以選擇性地用您自己的專用版本來(lái)覆蓋系 統(tǒng) C 庫(kù)函數(shù)。這種技術(shù)可用于 linux 和 Solaris 環(huán)境。 關(guān)于作者 Jay Allen 是 IBM linux for Service Providers Lab(LSPL)的程序員。可以通過(guò) [email protected] 與 Jay 聯(lián)系。