簡體   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