我想在 Linux 上试验谷歌的 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
在其他参数( $*:q )之前或之后添加您喜欢的任何额外内容(-Lfoo -lfoo)。
然后将其预先添加到您的路径并正常制作。
#tcsh version
% set path = ( ~/mytmpgccdir/ $path:q )
% make clean
% make
ps 如果是显式名称,您可以在命令行上覆盖它。类似于: 让所有 GCC=~/mytmpgccdir/gcc
pps 如果您确实使用了 LD_PRELOAD,您可能需要这样的脚本在运行程序之前设置环境 LD_PRELOAD。否则很容易在每个命令(如 /bin/ls、make、g++ 等)上结束 LD_PRELOAD'ing。
首先,检查 qmake 文档。有一种简单的方法可以指定(在 .pro 文件中)应始终链接某个库。
此外,由于您只是在试验,只需使用 LD_PRELOAD - 无需重新编译:
LD_PRELOAD="/usr/lib/foo/libtcmalloc.so" ./your_program
您不必将“your_program”链接到 google 的 tcmalloc 库。