2011-02-28 23 views
1

ねえねえ。 私が現在しようとしているのは、DigSig用の重要な暗号機能がないと思われるCentOS-KernelにDigSigツールを移植することです。私が働いている私のカーネルはないのでカーネルファイルの関数エラーの多重定義

void kzfree(const void *p) { 
    size_t ks; 
    void *mem = (void *)p; 

    if (unlikely(ZONP(mem))) 
      return; 
    ks = ksize(mem); 
    memset(mem, 0, ks); 
    kfree(mem); 

}

: だからポートがプラス、私は必要な機能を持っているこの私はちょうど新しい/linux/crypto.h私はこの少しのコードを追加しましたまだkzfreeを持っていない。すべてはIFNDEF、警備員#で覆われているので、彼は、この関数を複数回定義されている理由私は理解できない、もちろん

/home/Chris/dsTest/dsi_sysfs.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 
/home/Chris/dsTest/digsig_cache.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 
/home/Chris/dsTest/digsig_revocation.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 
/home/Chris/dsTest/dsi_sig_verify.o: In function `kzfree': 
/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: multiple definition of `kzfree' 
/home/Chris/dsTest/digsig.o:/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h:114: first defined here 

...:私はDigSigをコンパイルしようとすると は今、これが出力されます アイデア

+0

完全なプログラムを貼り付けることはできますか? – sunmoon

答えて

1

あなたのインクルードファイルは複数の場所に含まれます。 これはコンパイル時エラーではありません。しかしむしろリンクされた時間エラー。 ファイルのそれぞれは、コンパイルされ、生成.oファイル

/home/Chris/dsTest/dsi_sysfs.o 
/home/Chris/dsTest/digsig_cache.o 
/home/Chris/dsTest/digsig_revocation.o 
/home/Chris/dsTest/dsi_sig_verify.o 

次今それらをリンクしながら、それらに対応するCファイルが

/usr/src/kernels/2.6.18-194.32.1.el5-i686/include/linux/crypto.h 
が含まれているため、一緒には、上記の.oファイルに各1個kzfreezの複数の定義を見つけてしまいました

ifdefはファイルを保護していますが、これは異なるcファイルにまたがっていない同じcファイル(変換単位)に.hファイルが含まれないようにします。

cファイルに関数を記述し、makeファイルに追加して、別々にコンパイルしてリンクするようにしてください。 crypto.hにのみ宣言を追加してください。 (テストの場合は、crypto.cに定義を追加し、crypto.hに宣言することができます)。

関連する問題