Frage

Ich würde gerne mit Googles tcmalloc unter Linux experimentieren ...Ich habe hier ein riesiges Projekt mit Hunderten von qmake-generierten Makefiles ...Ich würde gerne einen Weg finden, gcc dazu zu bringen, eine globale Verknüpfung mit tcmalloc herzustellen (wie es bei libc der Fall ist) ...Ist das möglich?Oder muss ich jedes Makefile bearbeiten?

(Ich würde es vorziehen, nicht alle Profi-Dateien zu bearbeiten, da es Hunderte davon gibt)

(Außerdem haben wir bereits die Methode LD_PRELOAD ausprobiert und sie funktioniert nicht ganz richtig) ...

War es hilfreich?

Lösung

Wie greifen Ihre Makefiles auf den Compiler zu (gcc/g++/cc/c++)?

Wenn es nur der Name ist (g++) und nicht durch expliziten Pfad (/usr/bin/g++), können Sie einfach ein Ersatz-g++ in einem beliebigen Verzeichnis Ihrer Wahl erstellen und dieses Verzeichnis Ihrem Pfad voranstellen.

Z.B.:Ein ... kreieren ~/mytmpgccdir/g++ Datei:

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

Hinzufügen aller Extras (-Lfoo -lfoo) Sie möchten, entweder vor oder nach den anderen Argumenten ($*:q).

Hängen Sie es dann Ihrem Pfad vor und machen Sie es normal.

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

p.s.Wenn es sich um einen expliziten Namen handelt, können Sie ihn möglicherweise in der Befehlszeile überschreiben.Etwas wie: mache alles GCC=~/mytmpgccdir/gcc

p.p.s Wenn Sie LD_PRELOAD verwenden, möchten Sie möglicherweise, dass ein Skript wie dieses LD_PRELOAD festlegt, bevor Sie Ihr Programm ausführen.Andernfalls kann es leicht passieren, dass LD_PRELOAD bei jedem Befehl wie /bin/ls, make, g++ usw. ausgeführt wird.

Andere Tipps

Überprüfen Sie zunächst die QMake -Dokumentation. Es gibt eine einfache Möglichkeit, (in einer .Pro -Datei) festzustellen, dass eine bestimmte Bibliothek immer verknüpft werden sollte.

Da Sie gerade experimentieren, verwenden Sie einfach LD_PRELOAD - keine Neukompilation erforderlich:

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

Sie müssen "Your_Program" nicht mit der TCMALLOC -Bibliothek von Google verlinkt haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top