2011-09-05 45 views
0

我想知道malloc如何鏈接到主程序。基本上我有一個使用多個靜態和動態庫的程序。我將所有這些包含在我的makefile中,使用選項「-llibName1 -llibName2" 。 TCmalloc的文檔說,我們可以簡單地通過調用「LD_PRELOAD =/usr/lib64/libtcmalloc.so」來覆蓋我們的malloc。我無法理解tcamlloc如何被調用到所有這些靜態和動態庫。 tcmalloc也鏈接到STL庫和C++的新/刪除操作? 任何人都可以請給任何見解。如何將tcamalloc鏈接到主程序

回答

0

「LD_PRELOAD =/usr/lib64/libtcmalloc.so」指示加載程序在解析程序外部的符號時使用libtcmalloc.so,因爲libtcmalloc.so定義了一個名爲「malloc」的符號,這是您的程序將使用的版本。

如果您省略了LD_PRELOAD行,glibc.so(或您系統上的任何C庫)將成爲第一個定義名爲「malloc」的符號的共享庫。要注意的是,如果你連接一個靜態庫,它定義了一個名爲「malloc」的符號(並使用合適的參數等),或者另一個共享庫被加載並定義了一個名爲「malloc」的符號,你的程序將嘗試使用該版本的malloc。

無論如何,這是一般的想法;實際發生的事情非常有趣,我將不得不指導http://en.wikipedia.org/wiki/Dynamic_linker作爲更多信息的起點。

相關問題