全球使用谷歌的malloc?

时间:2009-10-22 21:46:13

标签: linux qt gcc tcmalloc

我想在Linux上试验Google的tcmalloc ...我这里有一个庞大的项目,有数百个qmake生成的Makefile ...我想找到一种方法让gcc全局链接到tcmalloc(就像它与libc一样)...这可能吗?或者我是否必须编辑每个Makefile?

(我不想编辑所有专业文件,因为有数百个)

(另外,我们已经尝试过LD_PRELOAD方法并且它工作不正常)......

2 个答案:

答案 0 :(得分:4)

您的makefile如何访问编译器( 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。

答案 1 :(得分:2)

首先,查看qmake文档。有一种简单的方法可以指定(在.pro文件中)应该始终链接某个库。

此外,由于您只是在尝试,只需使用LD_PRELOAD - 无需重新编译:

LD_PRELOAD="/usr/lib/foo/libtcmalloc.so" ./your_program

您不必将“your_program”链接到google的tcmalloc库。