1

ubuntu 13:04 にオープン ソース プロジェクトをインストールしようとしていますが、updateDB.cというクラスのメソッドで make プロセスが失敗します。コンパイル中に、次のエラーが発生しました。

updateDB.o: In function `update_cache_hash':
/usr/local/src/bgpinspect-0.5/src/updateDB.c:142: undefined reference to `EVP_DigestUpdate'
/usr/local/src/bgpinspect-0.5/src/updateDB.c:143: undefined reference to `EVP_DigestFinal_ex'
collect2: error: ld returned 1 exit status
make[1]: *** [BGPdb] Error 1
make[1]: Leaving directory `/usr/local/src/bgpinspect-0.5/src'
make: *** [all] Error 2

これは失敗するメソッドupdate_cache_hashです:

static uint16_t update_cache_hash( char *buff, int size ) {
    unsigned char md_hash[EVP_MAX_MD_SIZE];
    unsigned int md_len;
    uint16_t hash;

    EVP_DigestUpdate(&global_table.ctx, buff, size );
    EVP_DigestFinal_ex(&global_table.ctx, md_hash, &md_len);

    if ( md_len < 2 ) {
        ps_log( PS_LOG_ERROR, "EVP_DigestFinal_ex returned a short hash.\n" );
        return 0;
    }

    hash = ( (uint16_t) md_hash[md_len - 2] << 8 ) | md_hash[md_len - 1];
    hash = UPDATE_CACHE_MASK( hash );

    return hash;
}

このクラスのトップには include ステートメントがあります

#include <openssl/evp.h>

libssl-dev と一緒にコンピューターに openssl をインストールしました。私はcや静的リンクなどに慣れていないので、なぜそのエラーが発生するのかわかりません。このパスにevp.hがあります: /usr/include/openssl/evp.h

では、この問題を修正するためにメイクファイルを変更したり、構成したりするにはどうすればよいですか? make はこのパス/usr/include/openssl/evp.hを認識できないようです

4

2 に答える 2

5

undefined referenceエラーはリンカ エラーであるため、 が検出されているように見えますがgcc/usr/include/openssl/evp.hリンカはEVP_DigestUpdateおよびEVP_DigestFinal_ex関数を含むライブラリを検出できません。

問題のメイクファイルに-lcrypto引数があり、それmakeがシステム上で正しいことを確認していることを確認libcryptoします。

于 2013-11-10T01:45:26.293 に答える
0

リンカが libssl 関数を見つけることができません。libssl をプロジェクトにリンクする必要があります。

この SO 記事には提案があります: Undefined reference to t1sl_steup_key_block when linking OpenSSL

たとえば、makefile に -lssl を追加します。

gcc somefile.c -o someprogram -lssl
于 2013-11-10T01:42:46.693 に答える