Googleのperftools -lprofilerで正しくリンクするために、Ubuntu 11.10でgccを取得できません。 リンカーがプログラムで直接使用されていないライブラリを破棄することが問題のようです。Ubuntu 11.10リンクperftoolsライブラリ
例が役立ちます。 、私が実行します
linux-vdso.so.1 => (0x00007fff5a9ff000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f32bc1c9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f32bc593000)
通常:使用
#include <math.h>
int main()
{
double value;
for (int i=0; i < 1000000; i++)
{
for (int j=0; j < 1000; j++)
value = sqrt(100.9);
}
return 0;
}
コンパイル:LDDの./mainを使用して
g++ -c main.cpp -o main.o
g++ main.o -o main -lm -lprofiler
チェックの実行を
のは、このmain.cppにを呼ぶことにしましょう:
CPUPROFILE=/tmp/profile ./main
01プロファイル出力を生成するために
しかし、プロファイルライブラリはリンクされていないため、プロファイルが出力されません。
プロファイラライブラリが検索パスに含まれていることを確認し、共有ライブラリと静的ライブラリを直接リンクしようとしました。私はこのようなProfilerStart()とProfilerStop(AS(プロファイラを使用して関数呼び出しを含む一旦
上記試験は、16
またUbuntuの10.04は、Ubuntu 10.10、Ubuntuの11.04、SUSE 12.1、とFedora上で正常に動作します))、プロファイラライブラリは実行可能ファイルにリンクされます。
gccをプロファイラライブラリにリンクさせる方法に関するアイデアはありますか?
ありがとうございました。コメントanother.anon.cowardとして
perftoolsについてはあまり知られていませんが、その中で関数を呼び出さないとどのように役立つのでしょうか?コードがリンクされているが呼び出されていないか、まったくリンクされていない場合、違いは何ですか? –
'g ++ main.o -o main -Wl、-no-as-needed -lm -lprofiler'と' ldd'をチェックしてみてください。 –