我克隆了google-perf git tree。
> ./autogen.sh
> ./configure --enable-frame-pointers --prefix=/usr/
> make
> sudo make install
以上所有步骤都是成功的。我可以在/usr/include/gperftools/tcmalloc.h等中看到头文件
我的节目
#include <stdio.h>
#include <gpertools/malloc_extension.h>
#include <iostream>
int main()
{
const unsigned int tcmalloc_stats_buf_len_ = 32768;
char tcmalloc_stats_buf[tcmalloc_stats_buf_len_];
MallocExtension::instance()->GetStats(tcmalloc_stats_buf,
tcmalloc_stats_buf_len_);
printf("%s ",tcmalloc_stats_buf);
fflush(stdout);
}
汇编
g++ -ltcmalloc my_prog.c -o my_prog
my_prog.cc: undefine reference to MallocExtension::instance
如果我注释掉GetStats行,那么编译工作正常。所以我假设它与tcmalloc链接。但是,当我尝试访问API时,它会给我一个错误。
可能是什么问题?也许有任何想法?
答案 0 :(得分:0)
来自Aliaksey Kandratsenka
尝试将-ltcmalloc移动到最后。特别是在静态链接模式下, 链接器仅 时查看库对象 按命令行给出的顺序处理它,它只拉取符号 已知当时需要 。这并不广为人知[&34]。 关于静态链接有时需要指定libs 两次或更多次。
这不应该影响动态链接,但我想我已经听过一些了 发行版(也许是ubuntu)的链接器过于富有创意 配置(并要求-Wl, - no-as-needed或类似的东西 那)。