我无法在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