2013-09-15 2 views
0

При компиляции заголовка ядра 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 ле).

ответ

2

Это ошибка компоновщика, код скомпилирован в порядке. В следующий раз укажите -c, чтобы избежать ссылок.

+0

Спасибо. Кстати, означает ли это, что исходный код kmalloc отсутствует? Если это так, мне не хватает файла библиотеки и вам придется его загрузить. –

+0

Исходный код 'kmalloc' уже скомпилирован в ядро, больше ничего не нужно делать с ним или с ним. –

1

Если вы пытаетесь создать исходный код ядра без включения заголовков ядра и связывания с другими модулями ядра и самим ядром, вы получите ошибки.

Вы не можете просто использовать gcc для создания исходного кода ядра. Есть способ их создания.

+0

Vivek, я компилирую (& linking), но не строю. Как только все будет правильно составлено, я создам фактический исходный код. –

+0

В чем разница между компиляцией + привязкой и построением? Если вы не связываетесь с ядром и не включаете заголовки ядра, вы не сможете скомпилировать исходный код. –

+0

Возможно, мне нужно загрузить источник ядра, и именно это вызывает эту ошибку ссылки. –

Смежные вопросы