2013-11-10 4 views
1

우분투에 오픈 소스 프로젝트를 설치하려고하는데, make 프로세스가 updateDB.c 클래스의 메소드에서 실패합니다.make가 컴파일되지 않았습니다. 'EVP_DigestUpdate에 대한 정의되지 않은 참조가 있습니다.

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 <openssl/evp.h> 

포함이 있습니다이 실패 방법 update_cache_hash입니다

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 

: 컴파일하는 동안, 난이 오류가 libssl-dev와 함께 내 컴퓨터에 openssl이 설치되어 있습니다. /usr/include/openssl/evp.h

: 그것은 내가이 길에 evp.h이 등 C와 정적 링크 에 새로운 오전부터 그 오류를 제공 이유를 알아낼 수 없습니다 어떻게 makefile을 변경하거나이 문제를 해결할 수 있습니까? 왜냐하면 make가이 경로를 볼 수 없기 때문입니다. /usr/include/openssl/evp.h

답변

4

undefined reference 오류가 링커 오류가있다 gcc/usr/include/openssl/evp.h이지만 링커는 EVP_DigestUpdateEVP_DigestFinal_ex 기능을 가진 라이브러리를 찾을 수 없습니다.

문제의 메이크 파일에 -lcrypto 인수가 있고 make이 시스템에 올바르게 libcrypto을 찾고 있는지 확인하고 싶습니다.

+0

-lcrypto가 트릭을했습니다. –

+0

이 문제가있는 사람을위한 팁이 하나 더 있다면,'-lssl'이'-lcrypto'보다 먼저 나오는지 확인하십시오. 순서는 중요합니다. – robert

0

링커에서 libssl 기능을 찾을 수 없습니다. libssl을 프로젝트에 링크해야합니다.

이 SO 문서의 제안이 있습니다 Undefined reference to t1sl_steup_key_block when linking OpenSSL

예를 들어, 메이크에서 추가 것 -lssl : 그것은 것으로 나타나도록

gcc somefile.c -o someprogram -lssl 
+0

답장을 보내 주셔서 감사합니다 :) -lssl은 트릭을 한 -libcrypto를 제외하고 이미 make 파일에 있습니다. –