Глобально используете Google malloc?
Вопрос
Я бы хотел поэкспериментировать с tcmalloc от Google в Linux...У меня здесь огромный проект с сотнями Make-файлов, сгенерированных qmake...Я хотел бы найти способ заставить gcc глобально ссылаться на tcmalloc (как это делается с libc)...Возможно ли это?Или мне придется редактировать каждый Makefile?
(Я бы предпочел не редактировать все файлы pro, поскольку их сотни)
(Кроме того, мы уже пробовали метод 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).
Затем перенесите это на свой путь и сделайте как обычно.
#tcsh version
% set path = ( ~/mytmpgccdir/ $path:q )
% make clean
% make
p.s.Если у него есть явное имя, вы можете переопределить его в командной строке.Что -то вроде: сделайте все GCC=~/mytmpgccdir/gcc
p.p.s Если вы используете LD_PRELOAD, возможно, вам захочется, чтобы подобный скрипт устанавливал значение LD_PRELOAD перед запуском вашей программы.В противном случае легко отключить LD_PRELOAD'ing для каждой команды, такой как /bin/ls, make, g ++ и т.д.
Другие советы
Сначала ознакомьтесь с документацией qmake.Существует простой способ указать (в файле .pro), что определенная библиотека всегда должна быть связана с ней.
Кроме того, поскольку вы просто экспериментируете, просто используйте LD_PRELOAD - перекомпиляция не требуется:
LD_PRELOAD="/usr/lib/foo/libtcmalloc.so" ./your_program
Вам не обязательно связывать "your_program" с библиотекой tcmalloc Google.