[英]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.