質問

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ライブラリに対して。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top