繁体   English   中英

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

[英]How to use brk()/sbrk() with 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添加了答案,我将删除这个并且支持他。

在手册页上,您可以阅读此内容

“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>之前

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM