Pregunta

Me gustaría experimentar con tcmalloc de Google en Linux ... Tengo un proyecto enorme aquí, con cientos de archivos Makefile generados por qmake ... Me gustaría encontrar una manera de hacer que gcc se vincule globalmente con tcmalloc ( como lo hace con libc) ... es esto posible? ¿O tendré que editar cada Makefile?

(Prefiero no editar todos los archivos profesionales, ya que hay cientos de ellos)

(Además, ya probamos el método LD_PRELOAD y no está funcionando bien) ...

¿Fue útil?

Solución

¿Cómo acceden tus makefiles al compilador ( gcc / g ++ / cc / c ++ )?

Si es solo por nombre ( g ++ ), y no por una ruta explícita ( / usr / bin / g ++ ), simplemente puede crear un g ++ de reemplazo en cualquier directorio usted prefiere y antepone ese directorio a su ruta.

Por ejemplo: crear un & nbsp; ~ / mytmpgccdir / g ++ & nbsp; archivo:

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

Agregando los extras ( -Lfoo -lfoo ) que quieras, antes o después de los otros argumentos ( $ *: q ).

Luego prepáralo a tu camino y hazlo normalmente.

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

p.s. Si es por nombre explícito, puede anularlo en la línea de comandos. Algo como: & nbsp; haga que todos los GCC = ~ / mytmpgccdir / gcc

p.p.s Si usa LD_PRELOAD, es posible que desee una secuencia de comandos como esta para configurar LD_PRELOAD antes de ejecutar su programa. De lo contrario, es fácil terminar LD_PRELOAD'ing en cada comando como / bin / ls, make, g ++, etc.

Otros consejos

Primero, verifique la documentación de qmake. Hay una manera fácil de especificar (en un archivo .pro) que una determinada biblioteca siempre debe estar vinculada.

También, ya que solo estás experimentando, simplemente usa LD_PRELOAD - no es necesario volver a compilar:

LD_PRELOAD = " /usr/lib/foo/libtcmalloc.so" ./tu_programa_código

No es necesario que haya enlazado " your_program " contra la biblioteca tcmalloc de google.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top