Вопрос

Я бы хотел поэкспериментировать с 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top