2014-06-10 39 views
1

我有一個庫調用函數:例如malloc。 我在我的應用程序中使用庫。我希望庫不要調用malloc,而是每次調用malloc時定義「mymalloc」的函數。 總之,我想用一個不同名稱的符號來解析malloc符號。函數名別名

我已經試過此鏈接器選項:-Wl, - defsym = malloc的= mymalloc

和它的作品,但只是對於那些在應用 即來電:在節目中的malloc每次調用解析mymalloc,但庫中的調用仍然調用stdlibc malloc。

非常感謝, 達維德

+0

可行性取決於它是編譯的庫還是僅包含標題的庫。它是什麼? – stefan

+1

爲什麼你不能只調用你的函數'malloc'?或者寫一個'malloc'來代表'mymalloc'?您可能還需要替換'calloc','realloc','memalign'和'free'(根據https://sourceware.org/ml/libc-help/2012-04/msg00060.html) – davmac

+0

試試看你的'malloc'庫的實現。一些庫允許你勾選memoery分配並提供你自己的自定義分配器。如果你的支持,你可以得到你想要的結果,而不會在鏈接器中產生任何黑客行爲。 :http://linux.die.net/man/3/malloc_hook – Will

回答

0

這是原油,但你可以使用預處理器 - 的優點在於,預處理器在編譯之前運行:

#define malloc mymalloc

你將不得不#include的包含mymalloc之前之前的任何標準庫的聲明。

您還必須自己重新編譯任何編譯庫。實際上,我建議在生產中這樣做:我認爲代碼會很脆弱,並且可能存在潛伏在各個角落的潛在錯誤mallocs

+1

你可能想說「實際上我建議**反對**在生產中這樣做」 – stefan