我無法在Ubuntu 11.10中獲得gcc以正確鏈接谷歌perftools -lprofiler。 問題似乎是鏈接器放棄了不直接在程序中使用的庫。Ubuntu 11.10連接perftools庫
一個例子會有所幫助。
讓我們把這種main.cpp中:
#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
檢查可執行文件:
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)
通常情況下,我會運行:
CPUPROFILE=/tmp/profile ./main
生成配置文件輸出。但由於沒有生成配置文件輸出,因此配置文件庫未鏈接。
我確定profiler庫位於我的搜索路徑中,並嘗試直接連接到共享庫和靜態庫。
上述測試工作正常在Ubuntu 10.04,10.10的Ubuntu的,Ubuntu 11.04,SUSE 12.1,和Fedora 16.
另外,一旦予包括使用分析器(如ProfilerStart()和ProfilerStop(函數調用)),然後探查器庫被鏈接到可執行文件中。
有關如何讓gcc鏈接到探查器庫的任何想法?
謝謝。
我不太瞭解perftools,但如果您不調用任何函數,它會如何有所幫助?如果代碼被鏈接但沒有被調用,或者根本不存在,有什麼區別? – 2012-03-06 04:19:07
嘗試'g ++ main.o -o main -Wl,-no-as-needed -lm -lprofiler'並檢查'ldd' – 2012-03-06 05:40:00