Domanda

Mi piacerebbe sperimentare Google tcmalloc su Linux ... Ho un grande progetto qui, con centinaia di qmake generati da Makefile ... Vorrei trovare un modo per ottenere gcc per collegarsi globalmente a tcmalloc ( come fa con libc) ... È possibile? O dovrò modificare ogni Makefile?

(Preferirei non modificare tutti i file pro in quanto ce ne sono centinaia)

(Inoltre, abbiamo già provato il metodo LD_PRELOAD e non funziona abbastanza bene) ...

È stato utile?

Soluzione

In che modo i tuoi makefile accedono al compilatore ( gcc / g ++ / cc / c ++ )?

Se è solo per nome ( g ++ ) e non per percorso esplicito ( / usr / bin / g ++ ), puoi semplicemente creare un g ++ sostitutivo in qualunque directory preferisci e anteponi quella directory al tuo percorso.

Esempio: crea un & nbsp; ~ / mytmpgccdir / g ++ & nbsp; file:

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

Aggiunta di qualsiasi extra ( -Lfoo -lfoo ) che ti piace, prima o dopo gli altri argomenti ( $ *: q ).

Quindi pre-pendilo sul tuo percorso e fai normalmente.

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

P.S. Se ha un nome esplicito, potresti essere in grado di sovrascriverlo dalla riga di comando. Qualcosa del tipo: & nbsp; crea tutto GCC = ~ / mytmpgccdir / gcc

p.p.s Se usi LD_PRELOAD, potresti volere uno script come questo per impostare LD_PRELOAD prima di eseguire il tuo programma. Altrimenti è facile concludere LD_PRELOAD su ogni comando come / bin / ls, make, g ++, ecc.

Altri suggerimenti

Per prima cosa, controlla la documentazione di qmake. C'è un modo semplice per specificare (in un file .pro) che una determinata libreria deve sempre essere collegata.

Inoltre, poiché stai solo sperimentando, usa semplicemente LD_PRELOAD - nessuna ricompilazione necessaria:

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

Non devi aver collegato " tuo_programma " contro la libreria tcmalloc di google.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top