C++ 取消对tcmalloc公共API的引用

C++ 取消对tcmalloc公共API的引用,c++,malloc,tcmalloc,gperftools,C++,Malloc,Tcmalloc,Gperftools,我已经克隆了google perf git树 > ./autogen.sh > ./configure --enable-frame-pointers --prefix=/usr/ > make > sudo make install 上述所有步骤都是成功的。我可以在/usr/include/gperftools/tcmalloc.h等中看到头文件 我的节目 #include <stdio.h> #include <gpertools/malloc

我已经克隆了google perf git树

> ./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);
 }
如果我注释掉GetStats行,那么编译工作正常。所以我假设它与tcmalloc链接。然而,当我试图访问API时,它会给我一个错误


有什么问题吗?有什么想法吗

来自Aliaksey Kandratsenka

尝试将-ltcmalloc移到末尾。特别是在静态链接模式下, 链接器仅在创建时查看库对象 按照命令行中给定的顺序处理它,它只提取符号 当时已知需要。这不是广为人知的“抓住你了” 关于有时需要指定libs的静态链接 两次或更多次

这不应该影响动态链接,但我想我听过一些 发行版(也许是ubuntu)在链接器方面过于有创意 配置(需要-Wl,-no-as-needed或类似配置
那)

你能告诉我们你收到的错误信息吗?所以我们可以帮你。
g++ -ltcmalloc my_prog.c -o my_prog
my_prog.cc: undefine reference to MallocExtension::instance