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