我想在Linux上试验Google的tcmalloc ...我这里有一个庞大的项目,有数百个qmake生成的Makefile ...我想找到一种方法让gcc全局链接到tcmalloc(就像它与libc一样)...这可能吗?或者我是否必须编辑每个Makefile?
(我不想编辑所有专业文件,因为有数百个)
(另外,我们已经尝试过LD_PRELOAD方法并且它工作不正常)......
答案 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库。