2013-10-13 51 views
0

我想自己編寫一些libc函數(但不是所有的libc!),以提高程序的性能。但是GCC在編譯的程序中使用它們而不是libc函數還是忽略它們?用戶定義的函數能夠代替libc的函數嗎?

+0

檢查GCC手冊中的「弱鏈接」或「弱符號」。或者只是LD_PRELOAD。 –

+1

*用於提高我的程序的性能*如果您不得不問這個問題,libc可能不是性能瓶頸。 –

+0

你確實有一個自我認爲你可以提高libc函數的性能,而我們其他人已經使用它沒有任何問題。 –

回答

1

glibc中的所有公共符號都是weak linked,這意味着您可以提供自己的實現,它將在鏈接期間優先於弱符號。

所以,是的。你可以用相同的名稱/參數來定義你自己的函數,它們會被用來代替。一定要查看頭文件以查看函數的真實簽名,某些函數可能是擴展到另一個函數的宏。

您還可以創建一個共享庫,其中包含要覆蓋的函數,並讓動態鏈接器預加載它以覆蓋共享庫中的函數。有關更多信息,請參閱this question