我需要构建自己的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
答案 0 :(得分:8)
我在SLES 11 Linux上编译OpenSSL 1.0.1e时遇到了同样的问题。 在另一个网站上,我发现提示在调用make之前发出“make clean”。
就我而言,不成功的首次尝试是:
以普通用户(非root用户)身份登录:
. ./config
make
这与你在问题中提到的相同错误失败了。
成功的尝试是:
su
make clean
./config zlib
make
make install
答案 1 :(得分:3)
./config --prefix=/home/USERNAME/bin/ssl --openssldir=/home/USERNAME/bin/ssl/openssl -fPIC zlib no-idea no-mdc2 no-rc5 make depend make
对于-fPIC
,您使用shared
。
不需要--prefix
,因为它会使用--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位整数。no-comp
,因为压缩can leak information 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 depend
。
$ make
$ sudo make install
如果您需要清理现有配置然后重新配置,请执行以下操作:
make clean && make dclean
make dclean
是重新配置的关键。
另请参阅OpenSSL wiki上的Compilation and Installation。