我一直在尝试使用" 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
答案 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
值)包括:cbc
,ccm
,cfb
,{ {1}},ecb
,gcm
- 而不是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