Глобально использовать Google Malloc? - PullRequest
2 голосов
/ 23 октября 2009

Я бы хотел поэкспериментировать с tcmalloc от Google на Linux ... У меня есть огромный проект, с сотнями сгенерированных qmake Makefile'ов ... Я бы хотел найти способ получить gcc для глобальной ссылки на tcmalloc как это делает с libc) ... это возможно? Или мне придется редактировать каждый Makefile?

(я бы предпочел не редактировать все профессиональные файлы, так как их сотни)

(Кроме того, мы уже попробовали метод LD_PRELOAD, и он работает не совсем правильно) ...

Ответы [ 2 ]

4 голосов
/ 23 октября 2009

Как ваши make-файлы обращаются к компилятору ( 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. Если это явное имя, вы можете переопределить его в командной строке. Примерно так: make all GCC = ~ / mytmpgccdir / gcc

p.p.s Если вы используете LD_PRELOAD, вам может понадобиться такой скрипт, чтобы setenv LD_PRELOAD перед запуском вашей программы. В противном случае легко запустить LD_PRELOAD для каждой команды, такой как / bin / ls, make, g ++ и т. Д.

2 голосов
/ 23 октября 2009

Сначала проверьте документацию qmake. Существует простой способ указать (в файле .pro), что определенная библиотека всегда должна быть связана.

Кроме того, поскольку вы просто экспериментируете, просто используйте LD_PRELOAD - перекомпиляция не требуется:

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

Вам не нужно связывать "your_program" с библиотекой Google tcmalloc.

...