我通过输入编译我的c ++程序:
g++ main.cpp crypto/Sign.cpp -o main -lssl -lcrypto && ./main
不幸的是,我得到了这些输出:
/tmp/ccEDu0Qv.o: In function `Sign::md_ctx_sign_init(SignatureScheme, evp_md_ctx_st*)':
Sign.cpp:(.text+0x1b): undefined reference to `EVP_MD_CTX_reset'
Sign.cpp:(.text+0x104): undefined reference to `EVP_sha3_224'
Sign.cpp:(.text+0x137): undefined reference to `EVP_sha3_256'
Sign.cpp:(.text+0x16a): undefined reference to `EVP_sha3_384'
Sign.cpp:(.text+0x196): undefined reference to `EVP_sha3_512'
/tmp/ccEDu0Qv.o: In function `Sign::md_ctx_veri_init(SignatureScheme, evp_md_ctx_st*)':
Sign.cpp:(.text+0x22f): undefined reference to `EVP_MD_CTX_reset'
Sign.cpp:(.text+0x318): undefined reference to `EVP_sha3_224'
Sign.cpp:(.text+0x34b): undefined reference to `EVP_sha3_256'
Sign.cpp:(.text+0x37e): undefined reference to `EVP_sha3_384'
Sign.cpp:(.text+0x3aa): undefined reference to `EVP_sha3_512'
/tmp/ccEDu0Qv.o: In function `Sign::sign_hash(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_md_ctx_st*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
Sign.cpp:(.text+0x4a9): undefined reference to `EVP_MD_CTX_free'
Sign.cpp:(.text+0x53f): undefined reference to `EVP_MD_CTX_free'
/tmp/ccEDu0Qv.o: In function `Sign::get_public_key(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
Sign.cpp:(.text+0x697): undefined reference to `EVP_PKEY_get0_EC_KEY'
/tmp/ccEDu0Qv.o: In function `Sign::get_private_key(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)':
Sign.cpp:(.text+0x85b): undefined reference to `EVP_PKEY_get0_EC_KEY'
/tmp/ccEDu0Qv.o: In function `Sign::EC_sign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, SignatureScheme)':
Sign.cpp:(.text+0xa4a): undefined reference to `EVP_MD_CTX_new'
/tmp/ccEDu0Qv.o: In function `Sign::EC_veri(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, SignatureScheme)':
Sign.cpp:(.text+0xc56): undefined reference to `EVP_MD_CTX_new'
collect2: error: ld returned 1 exit status
那么,发生了什么错误?我该如何解决这个问题?
我使用的openssl是:
#:~$ which -a openssl
/usr/local/bin/openssl
/usr/bin/openssl
#:~$ openssl version
OpenSSL 1.1.1-pre5 (beta) 17 Apr 2018
在crypto / Sign.h中,它包括:
#include <openssl/conf.h>
#include <openssl/ec.h> // for EC_GROUP_new_by_curve_name, EC_GROUP_free, EC_KEY_new, EC_KEY_set_group, EC_KEY_generate_key, EC_KEY_free
#include <openssl/ecdsa.h> // for ECDSA_do_sign, ECDSA_do_verify
#include <openssl/err.h>
#include <openssl/evp.h>
#include <iostream>
#include <string>