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>