构建OpenSSL时未定义的引用

构建OpenSSL时未定义的引用,openssl,fedora,Openssl,Fedora,我需要构建自己的OpenSSL二进制文件,因为Fedora-18附带的包没有椭圆曲线加密。我执行以下命令: ./config --prefix=/home/USERNAME/bin/ssl --openssldir=/home/USERNAME/bin/ssl/openssl -fPIC zlib no-idea no-mdc2 no-rc5 make depend make 但我有链接错误: ../libcrypto.a(x86_64cpuid.o): In function `OPENSS

我需要构建自己的OpenSSL二进制文件,因为Fedora-18附带的包没有椭圆曲线加密。我执行以下命令:

./config --prefix=/home/USERNAME/bin/ssl --openssldir=/home/USERNAME/bin/ssl/openssl -fPIC zlib no-idea no-mdc2 no-rc5
make depend
make
但我有链接错误:

../libcrypto.a(x86_64cpuid.o): In function `OPENSSL_cleanse':
(.text+0x1a0): multiple definition of `OPENSSL_cleanse'
../libcrypto.a(mem_clr.o):mem_clr.c:(.text+0x0): first defined here
../libcrypto.a(cmll-x86_64.o): In function `Camellia_cbc_encrypt':
(.text+0x1f00): multiple definition of `Camellia_cbc_encrypt'
../libcrypto.a(cmll_cbc.o):cmll_cbc.c:(.text+0x0): first defined here
../libcrypto.a(aes-x86_64.o): In function `AES_encrypt':
(.text+0x460): multiple definition of `AES_encrypt'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0x62a): first defined here
../libcrypto.a(aes-x86_64.o): In function `AES_decrypt':
(.text+0x9f0): multiple definition of `AES_decrypt'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0xad0): first defined here
../libcrypto.a(aes-x86_64.o): In function `private_AES_set_encrypt_key':
(.text+0xab0): multiple definition of `private_AES_set_encrypt_key'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0x0): first defined here
../libcrypto.a(aes-x86_64.o): In function `private_AES_set_decrypt_key':
(.text+0xd80): multiple definition of `private_AES_set_decrypt_key'
../libcrypto.a(aes_core.o):aes_core.c:(.text+0x403): first defined here
../libcrypto.a(aes-x86_64.o): In function `AES_cbc_encrypt':
(.text+0xfa0): multiple definition of `AES_cbc_encrypt'
../libcrypto.a(aes_cbc.o):aes_cbc.c:(.text+0x0): first defined here

我在SLES 11 Linux上编译OpenSSL 1.0.1e时也遇到同样的问题。 在另一个网站上,我发现了在调用make之前发出“makeclean”的提示

就我而言,第一次失败的尝试是:

su
make clean
./config zlib
make
make install
以普通用户(非root用户)身份登录:

这与您在问题中提到的错误相同

成功的尝试是:

su
make clean
./config zlib
make
make install
对于
-fPIC
,您可以使用
共享

不需要
--前缀
,因为它将使用
--openssldir
。因此,配置调用类似于:

./config shared zlib no-idea no-mdc2 no-rc5 no-ssl2 no-ssl3 \
    enable-ec_nistp_64_gcc_128 --openssldir=/home/USERNAME/bin/ssl/openssl
行中的一些注释:

  • enable-ec_nistp_64_gcc_128
    是64位平台的一种加速,其中gcc提供128位整数
  • 通常,您需要
    无补偿
    ,因为压缩
  • 因为压缩会泄漏信息,所以通常不需要
    zlib
  • no-ssl2
    完全删除SSLv2,因为它不安全
  • no-ssl3
    完全删除SSLv3,因为它不安全
--openssldir=/home/USERNAME/bin/ssl/openssl
表示:

  • 二进制文件将位于
    /home/USERNAME/bin/ssl/openssl/bin
  • 库将位于
    /home/USERNAME/bin/ssl/openssl/lib
  • 标题将位于
    /home/USERNAME/bin/ssl/openssl/include
然后,您只需要运行以下命令。不需要
使依赖

$ make
$ sudo make install

如果需要清理现有配置,然后重新配置,请执行以下操作:

make clean && make dclean
make dclean
是重新配置的关键



另请参见OpenSSL wiki上的内容。

为什么要使用依赖?请尝试制作并制作安装。
/config
打印我需要发布的
make depend
您不应该使用
AES\u encrypt
和friends。您应该使用
EVP.*
函数。请参见OpenSSL wiki上的。事实上,您可能应该使用经过身份验证的加密,因为它同时提供机密性和真实性。请参见OpenSSL wiki上的。@Maxim-您还做了什么?在构建库时,这些问题不应该是现成的。我觉得你没有把一切都告诉我们。这对我很有效,谢谢。我还使用了
/config--prefix=$HOME enable ec enable ecdh enable ecdsa zlib
,但我不确定这些是否都是必需的。谢谢!这对我也很有效;RHEL 5.10。我使用了
/config--prefix=$HOME/usr\u local--openssldir=$HOME/usr\u local/openssl zlib
make clean && make dclean