2009-10-12 2 views
6

Wenn ich LD_PRELOAD=/usr/local/lib/libtcmalloc.so verwende, werden alle meine Anrufe zu malloc tcmalloc Anrufe. Wenn ich jedoch statisch gegen libtcmalloc verlinke, finde ich, dass gerade malloc aufgerufen wird, wenn ich immer noch die LD_PRELOAD Einstellung verwende.tcmalloc: Wie kann ich meine malloc-Aufrufe überschreiben, wenn sie statisch kompiliert werden?

Also wie kann ich statisch so gegen tcmalloc kompilieren, dass meine mallocs in tcmalloc einhaken?

Hinweise:

  • Ich verwende viel C++ neu etc, so nur #defining malloc tcmalloc
  • unmöglich funktionieren werde ich mich malloc_hook verwenden, aber ich würde haben dachte ich tcmalloc es zu tun bekommen könnte für mich, da es deutlich tun, ist es, wenn dynamisch

Antwort

11

Verknüpfung Symbole werden auf einer ersten Übereinstimmungsbasis aufgelöst. Sie müssen sicherstellen, dass libtcmalloc.a vor libc.a vom Linker durchsucht wird. Ich nehme an, dass Sie libc.a nicht explizit verknüpfen, da Sie dies normalerweise nicht tun müssen. Die Lösung besteht darin, -nostdlibs anzugeben und anschließend alle erforderlichen Bibliotheken explizit in der Reihenfolge zu verknüpfen, in der sie gesucht werden sollen. Regel etwas wie:

-nostdlibs -llibtcmalloc -llibm -llibc -llibgcc 

Eine andere Lösung, die einfacher sein kann, ist die Objektdatei zu verknüpfen (s) benötigt lösen tcmalloc anstatt die statische Bibliothek, da Objektdateien Vorrang vor den Bibliotheken nehmen Symbole bei der Lösung.

Verwandte Themen