c++ - ld : symbol(s) not found with OpenSSL (libssl)

标签 c++ openssl

我正在尝试在我的 Mac 上构建 TorTunnel。我已经成功安装了 Boost 库及其开发文件。 TorTunnel 还需要 OpenSSL 及其开发文件。

我已将它们安装在/usr/lib/libssl.dylib 和/usr/include/openssl/中。

当我运行 make 命令时,这是我得到的错误:

g++ -ggdb -g -O2 -lssl -lboost_system-xgcc42-mt-1_38  -o torproxy TorProxy.o HybridEncryption.o Connection.o Cell.o Directory.o ServerListing.o Util.o Circuit.o CellEncrypter.o RelayCellDispatcher.o CellConsumer.o ProxyShuffler.o CreateCell.o CreatedCell.o TorTunnel.o SocksConnection.o Network.o  
Undefined symbols:
  "_BN_hex2bn", referenced from:
      Circuit::initializeDhParameters()      in Circuit.o
  "_BN_free", referenced from:
      Circuit::~Circuit()in Circuit.o
      Circuit::~Circuit()in Circuit.o
      CreatedCell::getKeyMaterial(unsigned char**, unsigned char**)in CreatedCell.o
  "_DH_generate_key", referenced from:
      Circuit::initializeDhParameters()      in Circuit.o
  "_PEM_read_bio_RSAPublicKey", referenced from:
      ServerListing::getOnionKey()       in ServerListing.o
  "_BIO_s_mem", referenced from:
      Connection::initializeSSL()       in Connection.o
      Connection::initializeSSL()       in Connection.o
  "_DH_free", referenced from:
      Circuit::~Circuit()in Circuit.o
  "_BIO_ctrl_pending", referenced from:
      Connection::writeFromBuffer(boost::function)in Connection.o
  "_RSA_size", referenced from:
      HybridEncryption::encryptInSingleChunk(unsigned char*, int, unsigned char**, int*, rsa_st*)in HybridEncryption.o
      HybridEncryption::encryptInHybridChunk(unsigned char*, int, unsigned char**, int*, rsa_st*)in HybridEncryption.o
      HybridEncryption::encrypt(unsigned char*, int, unsigned char**, int*, rsa_st*)in HybridEncryption.o
  "_RSA_public_encrypt", referenced from:
      HybridEncryption::encryptInSingleChunk(unsigned char*, int, unsigned char**, int*, rsa_st*)in HybridEncryption.o
      HybridEncryption::encryptInHybridChunk(unsigned char*, int, unsigned char**, int*, rsa_st*)in HybridEncryption.o
  "_BN_num_bits", referenced from:
      CreateCell::CreateCell(unsigned short, dh_st*, rsa_st*)in CreateCell.o
      CreatedCell::getKeyMaterial(unsigned char**, unsigned char**)in CreatedCell.o
      CreatedCell::getKeyMaterial(unsigned char**, unsigned char**)in CreatedCell.o
      CreatedCell::isValid()      in CreatedCell.o
  "_SHA1", referenced from:
      CellEncrypter::expandKeyMaterial(unsigned char*, int, unsigned char*, int)in CellEncrypter.o
  "_BN_bn2bin", referenced from:
      CreateCell::CreateCell(unsigned short, dh_st*, rsa_st*)in CreateCell.o
  "_BN_bin2bn", referenced from:
      CreatedCell::getKeyMaterial(unsigned char**, unsigned char**)in CreatedCell.o
  "_DH_compute_key", referenced from:
      CreatedCell::getKeyMaterial(unsigned char**, unsigned char**)in CreatedCell.o
  "_BIO_new", referenced from:
      Connection::initializeSSL()       in Connection.o
      Connection::initializeSSL()       in Connection.o
  "_BIO_new_mem_buf", referenced from:
      ServerListing::getOnionKey()       in ServerListing.o
  "_AES_ctr128_encrypt", referenced from:
      HybridEncryption::AES_encrypt(unsigned char*, int, unsigned char*, unsigned char*, int)in HybridEncryption.o
      CellEncrypter::aesOperate(Cell&, aes_key_st*, unsigned char*, unsigned char*, unsigned int*)in CellEncrypter.o
  "_BIO_read", referenced from:
      Connection::writeFromBuffer(boost::function)in Connection.o
  "_SHA1_Update", referenced from:
      CellEncrypter::calculateDigest(SHAstate_st*, RelayCell&, unsigned char*)in CellEncrypter.o
      CellEncrypter::initKeyMaterial(unsigned char*)in CellEncrypter.o
      CellEncrypter::initKeyMaterial(unsigned char*)in CellEncrypter.o
  "_SHA1_Final", referenced from:
      CellEncrypter::calculateDigest(SHAstate_st*, RelayCell&, unsigned char*)in CellEncrypter.o
  "_DH_size", referenced from:
      CreatedCell::getKeyMaterial(unsigned char**, unsigned char**)in CreatedCell.o
  "_DH_new", referenced from:
      Circuit::initializeDhParameters()      in Circuit.o
  "_BIO_write", referenced from:
      Connection::readIntoBufferComplete(boost::function, boost::system::error_code const&, unsigned long)in Connection.o
  "_RSA_free", referenced from:
      Circuit::~Circuit()in Circuit.o
  "_BN_dup", referenced from:
      Circuit::initializeDhParameters()      in Circuit.o
      Circuit::initializeDhParameters()      in Circuit.o
  "_BN_new", referenced from:
      Circuit::initializeDhParameters()      in Circuit.o
      Circuit::initializeDhParameters()      in Circuit.o
  "_SHA1_Init", referenced from:
      CellEncrypter::CellEncrypter()in CellEncrypter.o
      CellEncrypter::CellEncrypter()in CellEncrypter.o
  "_RAND_bytes", referenced from:
      HybridEncryption::encryptInHybridChunk(unsigned char*, int, unsigned char**, int*, rsa_st*)in HybridEncryption.o
      Util::getRandomId()      in Util.o
  "_AES_set_encrypt_key", referenced from:
      HybridEncryption::AES_encrypt(unsigned char*, int, unsigned char*, unsigned char*, int)in HybridEncryption.o
      CellEncrypter::initKeyMaterial(unsigned char*)in CellEncrypter.o
      CellEncrypter::initKeyMaterial(unsigned char*)in CellEncrypter.o
  "_BN_set_word", referenced from:
      Circuit::initializeDhParameters()      in Circuit.o
  "_RSA_new", referenced from:
      ServerListing::getOnionKey()       in ServerListing.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [torproxy] Error 1

知道如何修复它吗?

最佳答案

您还需要 libcrypto。

将您的链接行更改为:

g++ -ggdb -g -O2 -lssl -lcrypt ... as before ...

关于c++ - ld : symbol(s) not found with OpenSSL (libssl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2963453/

相关文章:

c++ - 运行时检查失败 #0。不知道如何使用 CDECL

c++ - 这是内联函数的有效用法吗?

linux - Broadcom 引擎的 OpenSSL 速度测试

openssl - 使用 OpenSSL EVP_DigestSign* 生成 CMAC key 失败

c# - System.Security.Cryptography.OpenSsl 如何调用 OpenSSL 函数?

Delphi - 与 Indy 组件的 SSL TCP 通信

c++ - reinterpret_cast<char *> 是 reinterpret_cast 的唯一有效用法吗?

c++ - C++中的复制构造函数和临时对象

c++ - 如何在 C++ 中将生成的字符串存储在 vector 中?

c - 长度大于8192的base64解码文件?