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

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

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

有帮助吗?

解决方案

您的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。

其他提示

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

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

<代码> LD_PRELOAD = QUOT; /usr/lib/foo/libtcmalloc.so" ./your_program

您不必链接“your_program”针对谷歌的tcmalloc库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top