在编译SCTP内核头时,我得到了一个令人费解的编译器错误(使用蓝色文本而不是读取),这是由调用其原型定义的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;
}
gcc错误消息(在本机C中编译):
/tmp/ccKDKVjf.o:在函数
sctp_datamsg_new': s.c:(.text+0x2215): undefined reference to
__ kmalloc'cols2:错误:ld返回1退出 状态
所以我想知道的是,kmalloc函数源代码是否已正确定义(或者根本没有实现,或者调用此函数的代码只能在内核模式下编译。我实际上并没有尝试构建输出文件(还),我在emacs中发出的编译命令是: gcc sc (其中sc是包含标题的.c文件 - 只是试图确保在构建输出文件之前所有内容都正确编译)
答案 0 :(得分:2)
这是一个链接器错误,代码编译得很好。下次,指定-c
以避免链接。
答案 1 :(得分:1)
如果您尝试构建内核源代码而不包含内核头文件并链接其他内核模块和内核本身,则会出现错误。
你不能只使用gcc来构建内核源代码。有一种方法可以构建它们。