c - 如何在 gcc 中使用 brk()/sbrk()

标签 c linux gcc

我正在使用 brk(2) 编写自己的 malloc() 研究实现。但是,当我尝试在 Linux Mint 17.2 上使用 gcc 4.8.4 编译代码时:

gcc -g -O0 -std=c99 -Wall -Werror -pedantic zalloc.c -c -o zalloc.o

我遇到了“函数 brk 的隐式声明”错误:

zalloc.c:30:2: error: implicit declaration of function ‘sbrk’ [-Werror=implicit-function-declaration]

我已经在用了

#include <unistd.h>

在使用 brk() 的文件中。

我应该使用 -l 还是 -L 链接特定的库?在 man brk 中,有一个对 glibc 的 Feature Test Macro requirements 的神秘引用:

Since glibc 2.12:
               _BSD_SOURCE || _SVID_SOURCE ||
                   (_XOPEN_SOURCE >= 500 ||
                       _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) &&
                   !(_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600)
           Before glibc 2.12:
               _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

是否需要定义这些宏之一才能使用 brk() ?

最佳答案

你需要使用

-std=gnu99

如果 EOF 添加了一个答案,我会删除这个并给他投票。

关于c - 如何在 gcc 中使用 brk()/sbrk(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36701761/

相关文章:

c - C 函数调用时出现段错误

php - 如何在window操作系统中使用安装在linux操作系统上的PHP接口(interface)?

linux - 使用 Luasec 产生 "module ' ssl.core' not found”

linux - Play 应用程序启动时出错

c - 为库函数定义编译器警告/错误

gcc - 如何在 AddressSanitizer 错误时生成核心转储

c - C 中的 Select() 问题

c - 如何将信号传递给子进程

c - OpenCV Lucas Kanade 光流

c++ - 为什么 std::size() 不是 gcc 8.2.0 中的 std 成员