我想在Linux上試用谷歌的tcmalloc ...我在這裏有一個巨大的項目,有數百個qmake生成的Makefile的...我想找到一種方法讓gcc全局鏈接到tcmalloc(如它使用libc)...這可能嗎?或者我將不得不編輯每個Makefile?全球使用Google的malloc?
(我不想因爲有數百人編輯所有的親文件)
(另外,我們已經嘗試了LD_PRELOAD方法,它不工作完全正確)...
我想在Linux上試用谷歌的tcmalloc ...我在這裏有一個巨大的項目,有數百個qmake生成的Makefile的...我想找到一種方法讓gcc全局鏈接到tcmalloc(如它使用libc)...這可能嗎?或者我將不得不編輯每個Makefile?全球使用Google的malloc?
(我不想因爲有數百人編輯所有的親文件)
(另外,我們已經嘗試了LD_PRELOAD方法,它不工作完全正確)...
你的makefiles如何訪問編譯器(gcc/g ++/cc/C++)?
如果只是按名稱(G ++),而不是通過顯式路徑(在/ usr/bin中/ G ++),你可以簡單地創建一個替代G ++在你喜歡的任何目錄,並前置一個目錄添加到您路徑。
如:創建 〜/ mytmpgccdir/G ++ 文件:
#!/bin/tcsh -f
exec /usr/bin/g++ -Lfoo -lfoo $*:q
添加任何額外(-lfoo -lfoo)你喜歡的,之前或其他參數後($ *:q)。
然後預先將它放到您的路徑並正常製作。
#tcsh version
% set path = (~/mytmpgccdir/ $path:q)
% make clean
% make
p.s.如果是明確的名稱,您可以在命令行上覆蓋它。喜歡的東西: 讓所有GCC =〜/ mytmpgccdir/GCC
p.p.s如果你使用LD_PRELOAD,你可能想這樣一個腳本來運行程序之前SETENV LD_PRELOAD。否則,很容易在每個命令(如/ bin/ls,make,g ++等)上結束LD_PRELOAD'ing。
太棒了!我會給這一槍! – dicroce 2009-10-23 13:56:31
http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ – 2011-05-12 12:30:42
首先,檢查qmake文檔。有一個簡單的方法來指定(在.pro文件),某圖書館應始終被鏈接
而且,因爲你只是嘗試,只需使用LD_PRELOAD - 無需重新編譯:
LD_PRELOAD="/usr/lib/foo/libtcmalloc.so" ./your_program
您不必將「your_program」鏈接到谷歌的tcmalloc庫。
難道你不能只編輯qmake的.pro文件嗎? – liori 2009-10-22 21:54:56
您可以提供更多有關LD_PRELOAD無法正常工作的信息嗎?當你嘗試使用LD_PRELOAD時,你到底遇到了什麼? – 2009-10-22 22:04:34
好吧,它看起來應用程序的一部分是使用tcmalloc ...它的分配的廣泛範圍不會tcmalloc ...我試圖用ltrace來驗證這一點,但ltrace相當快地崩潰(順便說一句,ltrace只顯示調用到qt中,並且tcmalloc也只生成了一個顯示qt代碼的報告...但是,更多的東西在這個應用程序中調用malloc ...) – dicroce 2009-10-22 22:06:42