При компиляции заголовка ядра SCTP у меня возникла загадочная ошибка компилятора (с синим текстом вместо чтения), которая была вызвана вызовом функции kmalloc, прототип которой определен в. Вот функция, которая вызвала его:Ошибка компилятора linux kmalloc
/* Allocate and initialize datamsg. */
SCTP_STATIC struct sctp_datamsg *sctp_datamsg_new(gfp_t gfp)
{
struct sctp_datamsg *msg;
msg = kmalloc(sizeof(struct sctp_datamsg), gfp);
if (msg) {
sctp_datamsg_init(msg);
SCTP_DBG_OBJCNT_INC(datamsg);
}
return msg;
}
Сообщение об ошибке ССАГПЗ (компиляции в родной C):
/tmp/ccKDKVjf.o: In function
sctp_datamsg_new': s.c:(.text+0x2215): undefined reference to
__kmalloc' collect2: error: ld returned 1 exit status
Так что мне интересно, если kmalloc источник кода функции надлежащим образом определены (или на самом деле не реализован вообще, или если код, вызывающий эту функцию, может быть скомпилирован только в режиме ядра. Я на самом деле не пытался создать выходной файл (пока), команда компиляции, которую я выпустила в emacs, была: gcc sc (где sc - это файл .c, который содержит заголовок - просто пытается убедиться, что все правильно компилируется, прежде чем создавать выходной файл fi ле).
Спасибо. Кстати, означает ли это, что исходный код kmalloc отсутствует? Если это так, мне не хватает файла библиотеки и вам придется его загрузить. –
Исходный код 'kmalloc' уже скомпилирован в ядро, больше ничего не нужно делать с ним или с ним. –