2012-01-18 3 views
1

I持つカーネルモジュール用のMakefileを次カーネルモジュールのmakefile - オブジェクトから静的ライブラリを作成してから作るために別のオブジェクトとリンクする方法最終モジュール

EXTRA_CFLAGS+=-DLINUX_DRIVER -mhard-float 

obj-m += main.o 
other-objs := Obj.o Obj1.o Obj2.o Obj2.o ... 

質問:

方法最初にすべてのオブジェクトから静的なlibを作成し、作成された静的なlibを使って主なオブジェクトとリンクすることはできますか?

私は手動で2つの手順でこのプロセスを作成する方法を知っています。まず、私は上記のバージョンを呼び出します。

ar rcs libother.a Obj.o Obj1.o ... 

そして私はにメイクファイルを変更します:私は呼んで、私は誰もがこのための迅速かつクリーンなソリューションを知っている場合、私は疑問に思うのMakefileを習得していないので

EXTRA_CFLAGS+=-DLINUX_DRIVER -mhard-float 

obj-m += main.o libother.a 

おかげで、

ヌーノ

答えて

0

があなたのMakefileにこのルールを追加します。

libother.a: $(other-objs) 
    ar cr [email protected] $< 
+0

、よろしくで

、それが将来的に誰かを役に立てば幸いEXTRA_FLAGSは考慮されていません。どうして? –

0

あなたはこのようにそれを行うことができます。

#your variable definitions here 

all: your_module_name 

your_module_name: main.o libother.a 
    gcc $(YOUR_OPTIONS_HERE) -o your_module_name main.o -L. -lother 

libother.a: $(other-objs) 
    ar rcs [email protected] $^ 

main.o: main.c 

#your .o file dependencies here, if needed 

.PHONY: all 

あなたのモジュールが依存します。この道をmain.oとlibother.aの両方で、libother.aはいつでも再作成されます。 f other-objsが変更されました

ライブラリは、通常-lotherオプションでリンクされています(通常はライブラリで行われるため)。また、ライブラリの検索パスに現在のディレクトリを含めるように指定する必要があります。

2

私自身の質問に答えます。

--- 3.5ライブラリファイルの目標 - lib-y obj- *でリストされたオブジェクトがモジュール用に使用されているか、 がその特定のディレクトリ用の組み込みの.oで結合されています。 。 というオブジェクトをライブラリlib.aに含めることも可能です。 lib-yでリストされたすべてのオブジェクトは、そのディレクトリの単一の ライブラリにまとめられています。

だから、私がやったことは、このように見えるようにメイクファイルを変更しました:

EXTRA_CFLAGS+=-DLINUX_DRIVER -mhard-float 

obj-m += main.o lib.a 
lib-y := Obj.o Obj1.o Obj2.o Obj2.o ... 

私はなぜknwoませんが、推奨的回答は、メイクファイルは、カーネルのmakefileた「忘れて」作っていましたカーネルに含まれるすべてのフラグは無視されていました。Makefileにはすべて、それが働いていた文脈を忘れているようです。この方法を行う場合

ヌーノ・サントス

関連する問題