Googleのmallocをグローバルに使用しますか?
質問
LinuxでGoogleのtcmallocを試してみたい...ここに巨大なプロジェクトがあり、何百ものqmakeがMakefileを生成している... gccをtcmallocに対してグローバルにリンクする方法を見つけたい( libcで行うように)...これは可能ですか?または、すべてのMakefileを編集する必要がありますか?
(数百個あるため、すべてのproファイルを編集したくない)
(また、すでにLD_PRELOADメソッドを試しましたが、正しく機能していません)...
解決
makefileはどのようにコンパイラにアクセスしますか( gcc / g ++ / cc / c ++ )?
明示的なパス( / usr / bin / g ++ )ではなく、名前のみ( g ++ )である場合は、任意のディレクトリに置換g ++を作成できます。好みに応じて、そのディレクトリをパスの先頭に追加します。
例: を作成します〜/ mytmpgccdir / g ++  ファイル:
#!/bin/tcsh -f
exec /usr/bin/g++ -Lfoo -lfoo $*:q
他の引数( $ *:q )の前または後に、好きなエクストラ( -Lfoo -lfoo )を追加します。
次に、パスの前に追加して通常どおりに作成します。
#tcsh version
% set path = ( ~/mytmpgccdir/ $path:q )
% make clean
% make
p.s。明示的な名前の場合は、コマンドラインでオーバーライドできる場合があります。次のようなもの:  すべてのGCC =〜/ mytmpgccdir / gccを作成
p.p.s LD_PRELOADを使用する場合は、プログラムを実行する前に、このようなスクリプトでsetenv LD_PRELOADを設定することができます。それ以外の場合、/ bin / ls、make、g ++などのすべてのコマンドでLD_PRELOADを簡単に終了できます。
他のヒント
最初に、qmakeのドキュメントを確認してください。特定のライブラリを常にリンクするように(.proファイルで)指定する簡単な方法があります。
また、実験しているだけなので、単にLD_PRELOADを使用します-再コンパイルは不要です:
LD_PRELOAD =" /usr/lib/foo/libtcmalloc.so" ./your_program
" your_program"をリンクする必要はありません。 Googleのtcmallocライブラリに対して。