在编译使用 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>