2011-06-23 81 views
3

我想在Linux中實現一些自定義庫函數。例如,我要實現我自己的pthread_mutex_lock 調用pthread_mutex_unlock的malloc免費功能。我已閱讀LD_PRELOAD可用於使用您自己的自定義功能,雖然我沒有深入細節。庫函數的新實現,並在該函數內調用舊實現

但我有一個問題,我也想在我的新實現中使用原始函數。這樣做的訣竅是什麼,因爲兩者都有相同的名稱?

回答

3

您可以使用dlopen函數來打開要替換的庫(或者,如果RTLD_NEXT已經加載,請參閱註釋),然後使用dlsym函數查找該庫中要調用的函數的地址。

+0

聽起來像一個不錯的想法,將研究它。謝謝! – MetallicPriest

+2

你甚至不需要打開你正在插入的庫 - 使用'dlsym(RLTD_NEXT,「function」)'應該足以找到原始實現。 – caf

+0

是的,我後來意識到它,忘記編輯我的答案! –