在Mac上使用OpenSSL进行编译时找不到函数EVP_aes_256_ctr

时间:2016-10-09 16:13:32

标签: macos makefile gnu systemc

我一直在尝试使用" make"来编译一些文件。命令在目录上。但是,我一直收到这个错误:

Sammys-MacBook-Pro:p1 AlphaMale$ make
gcc -L/usr/local/lib/ -o kem-enc ske.o rsa.o kem-enc.o prf.o -lcrypto -lssl -lgmp
Undefined symbols for architecture x86_64:
"_EVP_aes_256_ctr", referenced from:
  _ske_encrypt in ske.o
  _ske_decrypt in ske.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [kem-enc] Error 1

2 个答案:

答案 0 :(得分:1)

错误信息是(在相关部分中):

Undefined symbols for architecture x86_64:
  "_EVP_aes_256_ctr", referenced from:
      _ske_encrypt in ske.o
      _ske_decrypt in ske.o

告诉您在您正在使用的OpenSSL版本中找不到函数EVP_aes_256_ctr。您是否尝试过Google搜索,比如说,' openssl evp_aes_256_ctr'?如果是这样,请说出来。如果没有,请这样做。如果您查看最新文档(OpenSSL 1.1.0),可以找到许多EVP_aes_256_ xyz 函数,但EVP_aes_256_ctr()不是一个他们。

因此,您必须追踪谁认为该功能存在以及他们在何处找到它。 OpenSSL文档中列出的encryption modes xyz 值)包括:cbcccmcfb,{ {1}},ecbgcm - 而不是ofb - 有点令人惊讶,但显然是这样。

您可以检查来源以查看它是否可用但未记录。查看来自ctr的来源,我可以找到:

openssl-1.1.0b.tar.gz

注意第787行!因此,在某些版本的OpenSSL中,该功能部分已知(我没有发现该功能的实现),但在OpenSSL网站的OpenSSL文档中没有正式记录。 话虽如此,跟踪./include/openssl/evp.h:780:const EVP_CIPHER *EVP_aes_256_ecb(void); ./include/openssl/evp.h:781:const EVP_CIPHER *EVP_aes_256_cbc(void); ./include/openssl/evp.h:782:const EVP_CIPHER *EVP_aes_256_cfb1(void); ./include/openssl/evp.h:783:const EVP_CIPHER *EVP_aes_256_cfb8(void); ./include/openssl/evp.h:784:const EVP_CIPHER *EVP_aes_256_cfb128(void); ./include/openssl/evp.h:785:# define EVP_aes_256_cfb EVP_aes_256_cfb128 ./include/openssl/evp.h:786:const EVP_CIPHER *EVP_aes_256_ofb(void); ./include/openssl/evp.h:787:const EVP_CIPHER *EVP_aes_256_ctr(void); ./include/openssl/evp.h:788:const EVP_CIPHER *EVP_aes_256_ccm(void); ./include/openssl/evp.h:789:const EVP_CIPHER *EVP_aes_256_gcm(void); ./include/openssl/evp.h:790:const EVP_CIPHER *EVP_aes_256_xts(void); ./include/openssl/evp.h:791:const EVP_CIPHER *EVP_aes_256_wrap(void); ./include/openssl/evp.h:792:const EVP_CIPHER *EVP_aes_256_wrap_pad(void); ./include/openssl/evp.h:794:const EVP_CIPHER *EVP_aes_256_ocb(void); ./include/openssl/evp.h:797:const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); ./include/openssl/evp.h:799:const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); 的来源并非易事,因此跟踪EVP_aes_256_cbc的来源同样繁琐。查看我自己的OpenSSL 1.0.2h版本(需要更新),我发现库中的目标文件EVP_aes_256_ctr中定义了EVP_aes_256_ctr()EVP_aes_256_cbc()。在e_aes.o的来源中提及ctr,但确切地了解crypto/evp/e_aes.c在目标文件中的具体情况......具有挑战性(如:" I&#39没有弄清楚怎么样,但是")。

答案 1 :(得分:0)

对我来说,Macports的openssl @ 1.0.2r_0(isNYCtermdate isCALtermdate isDPRtermdate )的标头与使用openssl 0.9.x(-I /opt/local/include/)的系统库不匹配,导致:

-L /usr/lib