包含__malloc_hook 的C++代码在linux上需要怎么编译
时间: 2023-11-27 17:49:17 浏览: 70
如果你的代码中包含了__malloc_hook,那么需要在编译时链接 glibc 库并指定编译选项 -ldl。具体步骤如下:
1. 编写代码并保存为 example.cpp:
```c++
#include <stdio.h>
#include <malloc.h>
void* my_malloc(size_t size) {
printf("my_malloc called, size=%lu\n", size);
return malloc(size);
}
int main() {
__malloc_hook = my_malloc;
int* p = (int*)malloc(sizeof(int));
printf("p = %p\n", p);
free(p);
return 0;
}
```
2. 使用 g++ 编译代码:
```bash
g++ example.cpp -ldl
```
在编译时需要链接 glibc 库并指定编译选项 -ldl。
3. 运行编译后的可执行文件:
```bash
./a.out
```
输出结果为:
```
my_malloc called, size=4
p = 0x5637d5a5c260
```
可以看到,程序成功调用了自定义的 my_malloc 函数。
相关问题
如果提示__malloc_hook is deprecated 该怎么编译
这个警告提示是因为 glibc 已经不再推荐使用 __malloc_hook 和 __free_hook 了。可以使用 __malloc_hook 的替代品 malloc_usable_size()。
如果你想忽略这个警告,可以在编译命令中添加 -Wno-deprecated-declarations 参数来禁止显示这个警告。
例如,在 gcc 编译器中,你可以这样编译:
```
gcc your_file.c -o your_program -Wno-deprecated-declarations
```
__malloc_hook is deprecated 是什么意思
`__malloc_hook` 是 C 语言标准库中的一个函数钩子,用于在程序中重定向内存分配函数 `malloc` 的调用。它可以被用于跟踪内存分配、重载内存分配函数等操作。
然而,`__malloc_hook` 不是标准 C 函数,而是 GNU C 库提供的一个扩展,因此在其他平台上可能不支持。另外,从 GNU C 库 2.26 开始,`__malloc_hook` 被标记为过时(deprecated),取而代之的是 `malloc_hook` 函数。
因此,当你使用 `__malloc_hook` 函数时,编译器可能会产生一个警告,提示你使用过时的函数。建议改用 `malloc_hook` 函数来替代。
阅读全文