3

私はlessfsを使用しようとしており、mhashを使用して暗号化フィンガープリントを生成する方法を学習しているため、mhashを見て、ハッシュアルゴリズムをどのように処理するかを確認しているため、プログラムで提供されている例のいくつかを実行しようとしています.しかし、私は複雑さとエラーに遭遇しています

私が解決しようとしていた Mhash の例は、http://mhash.sourceforge.net/mhash.3.html (または以下) にあります。

#include <mhash.h>
 #include <stdio.h>

 int main()
 {

        char password[] = "Jefe";
        int keylen = 4;
        char data[] = "what do ya want for nothing?";
        int datalen = 28;
        MHASH td;
        unsigned char *mac;
        int j;


        td = mhash_hmac_init(MHASH_MD5, password, keylen,
                            mhash_get_hash_pblock(MHASH_MD5));

        mhash(td, data, datalen);
        mac = mhash_hmac_end(td);

 /* 
  * The output should be 0x750c783e6ab0b503eaa86e310a5db738
  * according to RFC 2104.
  */

        printf("0x");
        for (j = 0; j < mhash_get_block_size(MHASH_MD5); j++) {
                printf("%.2x", mac[j]);
        }
        printf("\n");


        exit(0);
 }

しかし、次のエラーが発生します。

mhash.c.text+0x6c): undefined reference to `mhash_get_hash_pblock'
mhash.c.text+0x82): undefined reference to `mhash_hmac_init'
mhash.c.text+0x9c): undefined reference to `mhash'
mhash.c.text+0xa8): undefined reference to `mhash_hmac_end'
mhash.c.text+0xf9): undefined reference to `mhash_get_block_size'
collect2: error: ld returned 1 exit status
4

1 に答える 1

3

これはリンカエラーです — <a href="http://en.wikipedia.org/wiki/Ld_%28Unix%29" rel="nofollow">ldは Unix システムのリンカ プログラムです。ライブラリ関数 (mhash_get_hash_pblockなど) を使用しているが、それらの定義を提供していないため、リンカは不平を言っています。

プリプロセッサ ディレクティブは、mhash ライブラリから関数 (および型など) を#include <mhash.h> 宣言します。プログラムをコンパイルする (ファイルを生成する) にはこれで十分ですが、リンクする (実行可能ファイルを生成する) には十分ではありません。これらの関数も定義する.o必要があります。

-lmhashコンパイル コマンド ラインの最後に追加します。libmhash.aこれは、検索パスでライブラリ内の関数を検索できるようにリンカーに指示します。実行時に、関数はlibmhash.so検索パスからロードされます。ライブラリは、使用後にコマンド ラインで指定する必要があることに注意してください。リンカーは、必要な関数のリンクを作成します。これらの関数は、後続の引数によって提供される必要があります。

gcc -o myprogram myprogram.c -lmhash
于 2014-07-03T20:40:05.543 に答える