Pergunta

Gostaria de experimentar o TCMalloc no Linux do Google ... Eu tenho um projeto enorme aqui, com centenas de QMake gerado com o Makefile ... Eu gostaria de encontrar uma maneira de obter o GCC para vincular globalmente contra o TCMalloc (como se faça com libc) ... isso é possível? Ou terei que editar todos os makefile?

(Prefiro não editar todos os arquivos pro, pois existem centenas deles)

(Além disso, já tentamos o método LD_PRELOAD e não está funcionando bem) ...

Foi útil?

Solução

Como seus makefiles acessam o compilador (GCC/G ++/CC/C ++)?

Se for apenas pelo nome (g ++), e não por caminho explícito (/usr/bin/g ++), você pode simplesmente criar um G ++ de substituição em qualquer diretório que preferir e prenda esse diretório ao seu caminho.

Por exemplo: crie um ~/mytmpgccdir/g ++ Arquivo:

#!/bin/tcsh -f
exec /usr/bin/g++ -Lfoo -lfoo $*:q

Adicionando quaisquer extras (-Lfoo -lfoo) você gosta, antes ou depois dos outros argumentos ($*: q).

Em seguida, prenda-o para o seu caminho e faça normalmente.

#tcsh version
% set path = ( ~/mytmpgccdir/  $path:q )
% make clean
% make

PS Se for por nome explícito, você poderá substituí -lo na linha de comando. Algo como: faça tudo GCC = ~/mytmpgccdir/gcc

PPS Se você usar LD_PRELOAD, você pode querer um script como este para Setenv LD_PRELOAD antes de executar seu programa. Caso contrário, é fácil acabar com ld_preload'ing em todos os comando como /bin /ls, make, g ++, etc.

Outras dicas

Primeiro, verifique a documentação do QMake. Existe uma maneira fácil de especificar (em um arquivo .pro) em que uma determinada biblioteca deve estar sempre vinculada.

Além disso, como você está apenas experimentando, basta usar LD_PRELOAD - Não é necessária recompilação:

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

Você não precisa ter vinculado "Your_Program" na biblioteca TCMalloc do Google.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top