对tcmalloc公共API的未定义引用
undefine reference to tcmalloc public API
我已经克隆了google perf git树。
> ./autogen.sh
> ./configure --enable-frame-pointers --prefix=/usr/
> make
> sudo make install
以上所有步骤都是成功的。我可以在/usr/include/gperftools/tcmalloc.h etc 中看到头文件
我的程序
#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时,它会给我一个错误。
可能是什么问题?也许有什么想法吗?
来自Aliaksey Kandratsenka
试着把-ltcmalloc移到最后。特别是在静态链接模式下,链接器仅在它所在的时间查看库对象按照命令行中给定的顺序处理它,它只提取符号当时已知需要。这并不是广为人知的"明白"关于有时需要指定libs的静态链接两次或多次。
这不应该影响动态链接,但我想我听到了一些发行版(也许是ubuntu)在链接器方面过于创新配置(和require-Wl,-no as needed或类似的东西)。
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用