Как использовать madvise и связанные макросы? - PullRequest
0 голосов
/ 06 марта 2020

Когда я компилирую, используя 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>

Кажется, это работает, но я никогда раньше такого не делал. я иду об этом правильный путь? Я просто обеспокоен тем, что моя методология немного хакерская ...

1 Ответ

0 голосов
/ 06 марта 2020

Я столкнулся со ссылкой на feature_test_macros(7), в которой предлагается определить, как у меня в вопросе, или (как я решил сделать) использовать флаг -D, чтобы определить макросы с помощью компилятора. Я выбрал эту опцию, чтобы определенные мной макросы были определены для нескольких исходных файлов.

...