0

在编译使用 SCTP 内核头文件的代码时,<sctp/chunk.h>我遇到了一个令人费解的编译器错误(使用蓝色文本而不是读取),这是由调用kmalloc其原型定义在<linux/slob-def.h>. 这是导致它的功能:

/* 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;
}

gcc 错误消息(在本机 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 s.c在哪里- 只是试图确保在构建输出文件之前一切都正确编译)。s.c.c<sctp/chunk.h>

4

2 回答 2

2

那是一个链接器错误,代码编译得很好。下次,指定-c避免链接。

于 2013-09-15T19:09:19.437 回答
1

如果你试图构建内核源代码而不包括内核头文件和链接到其他内核模块和内核本身,你会得到错误。

您不能只使用 gcc 来构建内核源代码。有一种方法可以构建它们。

于 2013-09-16T08:40:10.813 回答