2009-10-12 1 views
6

LD_PRELOAD=/usr/local/lib/libtcmalloc.soを使用すると、mallocのすべての呼び出しがtcmalloc呼び出しになります。しかし、私がlibtcmallocと静的にリンクすると、私はまだLD_PRELOADの設定を使わない限り、ストレートmallocが呼び出されていることがわかります。tcmalloc:静的にコンパイルするときに、malloc呼び出しをオーバーライドするにはどうすればよいですか?

tcmallocにmallocがフックするように、tcmallocに対してどのようにして静的にコンパイルできますか?

注:

  • 私は私が考え 私は は自分自身をmalloc_hook使用する必要がおそらく
  • を動作しませんtcmallocするので、 だけ#definingのmallocをなどC++の新しいの多くを使用しますが、い動的

答えて

11

をリンクするとき、それは明らかにそれ をやっているので、 が、私は私のためにそれを を行うためのtcmallocを得ることができると思っていシンボルは、最初の一致基準で解決されます。リンカーによってlibtcmalloc.aがより先に検索されていることを確認する必要があります。 libc.a通常はそうする必要がないので、libc.aを明示的にリンクしていないと仮定します。これを解決するには、-nostdlibsを指定し、必要なライブラリを検索する順番で明示的にリンクします。通常のようなもの:簡単かもしれ

-nostdlibs -llibtcmalloc -llibm -llibc -llibgcc 

別の解決策は、オブジェクトファイルは、シンボルを解決するためのライブラリよりも優先するので、静的ライブラリではなくtcmalloc解決するために必要なオブジェクトファイル(複数可)をリンクすることです。

関連する問題