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

问题描述 投票:-1回答:2

我一直在尝试使用目录上的“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
macos makefile gnu systemc
2个回答
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 modesxyz值)包括:cbcccmcfbecbgcmofb - 而不是ctr--略微令人惊讶,但显然如此。

您可以检查源是否可用但未记录。从openssl-1.1.0b.tar.gz的源头看,我可以找到:

./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);

注意787行!因此,在某些版本的OpenSSL中,该功能部分已知(我没有发现该功能的实现),但在OpenSSL网站的OpenSSL文档中没有正式记录。话虽如此,跟踪EVP_aes_256_cbc的来源并非微不足道,因此跟踪EVP_aes_256_ctr的来源同样繁琐。查看我自己构建的OpenSSL 1.0.2h(需要更新),我发现在库中的目标文件EVP_aes_256_ctr()中定义了EVP_aes_256_cbc()e_aes.o。在ctr的来源中提到crypto/evp/e_aes.c,但确切地说明EVP_aes_256_ctr如何在目标文件中是......具有挑战性(如:“我还没有弄清楚如何,但是”)。


0
投票

对我来说,Macports的openssl @ 1.0.2r_0(-I /opt/local/include/)和openssl 0.9.x(-L /usr/lib)的系统库之间的标题不匹配导致:

Undefined symbols for architecture x86_64:
            "_EVP_aes_256_ctr", referenced from:
                _libssh2_crypt_method_aes256_ctr in liblibssh2_sys-8dfe6494e5de1ded.rlib(crypt.o)
            "_EVP_aes_192_ctr", referenced from:
                _libssh2_crypt_method_aes192_ctr in liblibssh2_sys-8dfe6494e5de1ded.rlib(crypt.o)
            "_EVP_aes_128_ctr", referenced from:
                _libssh2_crypt_method_aes128_ctr in liblibssh2_sys-8dfe6494e5de1ded.rlib(crypt.o)
          ld: symbol(s) not found for architecture x86_64
© www.soinside.com 2019 - 2024. All rights reserved.