我正在尝试使用openssl 1.0.2g构建nginx 1.9.12。
nginx使用./config(来自openssl包的脚本)自行构建openssl。
不幸的是./config脚本检测操作系统架构:[ "$MACHINE" ] || MACHINE=``(uname -m) 2>/dev/null`` || MACHINE="unknown"
并基于此创建Makefile(在这种情况下为x86_64)。
我通过nginx向openssl提供-m32
参数,但这还不够。
我需要改变\提供环境。变量MACHINE,它等于x86。
似乎gradle“环境”(在Exec任务中)不起作用。它适用于nginx,但参数不会传递给子进程(./config)。
所以我遇到链接器失败的情况,因为无法将x86对象与x86_64链接。
有没有办法设置环境。 gradle脚本中的变量MACHINE?
答案 0 :(得分:0)
我提供" -m32"通过nginx到openssl的争论,但还不够。我需要改变\提供环境。变量MACHINE,它等于x86。
您不能简单地添加-m32
并构建OpenSSL源。您必须允许OpenSSL自行配置并写出<openssl/opensslconf.h>
文件。
此:
[ "$MACHINE" ] || MACHINE=(uname -m) 2>/dev/null
表示您可以导出MACHINE
,OpenSSL应该在该行上兑现它。您应该将其设置为i686:$ MACHINE=i686 ./config -m32
。然而,事情之后的事情是一个废话,但是:)
由于设置MACHINE
通常是为了交叉编译而进行的,所以进行了垃圾拍摄。还有一个名为CROSS_COMPILE
的变量发挥作用。另请参阅OpenSSL的Configure
脚本。
这里有几个测试:
# On i686 machine
$ MACHINE=i686 ./config
Operating system: i686-whatever-linux2
# On i686 machine
$ MACHINE=x86_64 ./config
Operating system: x86_64-whatever-linux2
# On x86_64 machine
$ MACHINE=i686 ./config
Operating system: i686-whatever-linux2
# On x86_64 machine
$ MACHINE=x86_64 ./config
Operating system: x86_64-whatever-linux2
有没有办法设置环境。 gradle脚本中的变量MACHINE?
抱歉,不知道。 Nginx正在加剧。我不确定我是否会添加另一个间接级别来解决问题更难解决。
也许这会有所帮助:Setting environment variables from Gradle。
OpenSSL有一个Configure
,它需要一个LIST
参数:
$ ./Configure LIST | grep linux
...
linux-aarch64
linux-alpha-gcc
linux-aout
...
linux-generic32
linux-generic64
...
我认为您希望使用linux-generic32
或linux-elf
配置OpenSSL。但是,我不相信你可以使用linux-elf
,因为它会吸引主持人的架构。
过去,我在使用Nginx的构建系统时遇到了很多问题,特别是在使用FIPS验证的对象模块时。我似乎记得我需要修改他们的构建脚本以获得我需要的东西。您可能需要这样做。
这是我在Fedora 23 i686机器上看到的。请注意,它使用导致i686-whatever-linux2
的{{1}}三元组。
linux-elf
$ cd openssl-master
$ ./config
Operating system: i686-whatever-linux2
Configuring for linux-elf
Configuring OpenSSL version 1.1.0-pre5-dev (0x0x10100005L)
no-crypto-mdebug [default] OPENSSL_NO_CRYPTO_MDEBUG (skip dir)
no-crypto-mdebug-backtrace [forced] OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE (skip dir)
no-dynamic-engine [forced]
no-ec_nistp_64_gcc_128 [default] OPENSSL_NO_EC_NISTP_64_GCC_128 (skip dir)
no-egd [default] OPENSSL_NO_EGD (skip dir)
no-heartbeats [default] OPENSSL_NO_HEARTBEATS (skip dir)
no-md2 [default] OPENSSL_NO_MD2 (skip dir)
no-rc5 [default] OPENSSL_NO_RC5 (skip dir)
no-sctp [default] OPENSSL_NO_SCTP (skip dir)
no-shared [default]
no-ssl-trace [default] OPENSSL_NO_SSL_TRACE (skip dir)
no-ssl3 [default] OPENSSL_NO_SSL3 (skip dir)
no-ssl3-method [default] OPENSSL_NO_SSL3_METHOD (skip dir)
no-unit-test [default] OPENSSL_NO_UNIT_TEST (skip dir)
no-weak-ssl-ciphers [default] OPENSSL_NO_WEAK_SSL_CIPHERS (skip dir)
no-zlib [default]
no-zlib-dynamic [default]
Configuring for linux-elf
CC =gcc
CFLAG =-Wall -O3 -pthread -DL_ENDIAN -fomit-frame-pointer -Wa,--noexecstack
SHARED_CFLAG =-fPIC
DEFINES =DSO_DLFCN HAVE_DLFCN_H NDEBUG OPENSSL_THREADS OPENSSL_NO_DYNAMIC_ENGINE OPENSSL_PIC OPENSSL_BN_ASM_PART_WORDS OPENSSL_IA32_SSE2 OPENSSL_BN_ASM_MONT OPENSSL_BN_ASM_GF2m SHA1_ASM SHA256_ASM SHA512_ASM MD5_ASM RMD160_ASM AES_ASM VPAES_ASM WHIRLPOOL_ASM GHASH_ASM ECP_NISTZ256_ASM POLY1305_ASM
LFLAG =
PLIB_LFLAG =
EX_LIBS =-ldl
APPS_OBJ =
CPUID_OBJ =x86cpuid.o
UPLINK_OBJ =
BN_ASM =bn-586.o co-586.o x86-mont.o x86-gf2m.o
EC_ASM =ecp_nistz256.o ecp_nistz256-x86.o
DES_ENC =des-586.o crypt586.o
AES_ENC =aes-586.o vpaes-x86.o aesni-x86.o
BF_ENC =bf-586.o
CAST_ENC =c_enc.o
RC4_ENC =rc4-586.o
RC5_ENC =rc5-586.o
MD5_OBJ_ASM =md5-586.o
SHA1_OBJ_ASM =sha1-586.o sha256-586.o sha512-586.o
RMD160_OBJ_ASM=rmd-586.o
CMLL_ENC =cmll-x86.o
MODES_OBJ =ghash-x86.o
PADLOCK_OBJ =e_padlock-x86.o
CHACHA_ENC =chacha-x86.o
POLY1305_OBJ =poly1305-x86.o
BLAKE2_OBJ =
PROCESSOR =
RANLIB =/usr/bin/ranlib
ARFLAGS =
PERL =/usr/bin/perl
THIRTY_TWO_BIT mode
BN_LLONG mode
Configured for linux-elf.
看起来与linux-generic32
和i686-whatever-linux2
非常相似:
linux-elf