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 に答える