Когда я компилирую, используя gcc --std=c99 -g -Wall ...
, я получаю это:
warning: implicit declaration of function ‘madvise’ [-Wimplicit-function-declaration]
...
error: ‘MADV_DONTNEED’ undeclared
...
Поэтому я использовал это: `gcc -print-prog-name=cpp` -v
, чтобы найти, где мой компилятор ищет заголовки, и обнаружил, что для * 1006 есть только заголовок * поэтому я посмотрел на источник файлов, и он показывает это:
#ifdef __USE_BSD
/* Advise the system about particular usage patterns the program follows
for the region starting at ADDR and extending LEN bytes. */
extern int madvise (void *__addr, size_t __len, int __advice) __THROW;
#endif
Я провел некоторое исследование, почему __USE_BSD
не будет определен, но не нашел много. Я обнаружил, что features.h
может использоваться для его определения. Поэтому я попытался поместить это в верхнюю часть моего кода:
#define _BSD_SOURCE 1
#include <features.h>
Кажется, это работает, но я никогда раньше такого не делал. я иду об этом правильный путь? Я просто обеспокоен тем, что моя методология немного хакерская ...