5

私はvirtualboxカーネルモジュールを組み込みにしようとしていましたが、ここでほぼ完了しましたが、カーネルがすべてのvbox *モジュールを単一のものとして扱っているように見えるため、最後のステップでコンパイルを停止しました。

drivers/vboxnetadp/built-in.o: In function `cleanup_module':
(.exit.text+0x0): multiple definition of `cleanup_module'
drivers/vboxdrv/built-in.o:(.exit.text+0x0): first defined here
drivers/vboxnetadp/built-in.o: In function `init_module':
(.init.text+0x0): multiple definition of `init_module'

.. suppressed output ...

make[1]: *** [drivers/built-in.o] Error 1
make: *** [drivers] Error 2

何かご意見は ?これが私がそれを得た方法です:

すべてのモジュールソースをドライバーフォルダーにコピーし、makefileを編集し、を配置しobj-y += vbox/、vboxモジュールのすべてのMakefileを編集し、obj-mをobj-yに変更して、組み込みのかなり汚いハックにしましたが、機能しました。

編集

なぜそれをする必要がありますか?自分のマシンでモジュールの読み込みを無効にする必要があるので、モジュールは存在しないはずです。すべてのモジュールを自分で作成しました。残っているのはvboxのものだけです。

4

1 に答える 1

0

基本的にc-programming-language-questionであるため、あなたの質問はむしろStackOverflowに属していると思います。

あなたが直面している問題は、2つの(以前は別々だった)プログラムを1つにコンパイルしようとすることです。どちらも同じ機能を使用しているようです。つまり、それぞれのコンテキスト内で使用されているようです。

私の推測では、これらの複数init_moduleの関数または他の関数のすべての名前を別々の名前空間(net_init_moduleとなどdrv_init_module)に変更する必要があります。あるいは、これらの関数を「ローカル」であると宣言する方法があるかもしれません-私がCでプログラムしたのは久しぶりです...

于 2012-08-08T20:03:03.943 に答える