如何在gcc中使用brk()/sbrk()函数

3

我正在使用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()吗?

4
我认为你也可以使用-std=gnu99来调用gcc。 - EOF
@EOF 这就是正确的答案。现在它可以工作了。你应该把它设为答案,我会点赞的。 - Sebastien Guimmara
2个回答

2

您需要使用

-std=gnu99

如果EOF添加了答案,我将删除这个答案并点赞他的。

0
在 man 页面上你可以读到:
“glibc 的特性测试宏要求”
你需要定义 _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500。 但是 clang 写道:
警告:“_BSD_SOURCE 和 _SVID_SOURCE 已过时,请使用 _DEFAULT_SOURCE”。
#define _XOPEN_SOURCE 500
#define _DEFAULT_SOURCE
#include <unistd.h>

定义需要放在 #include <unistd.h> 之前


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接