我必须按照http://wiki.openssl.org/index.php/Android上Debian 7系统上的说明为Android构建OpenSSL 1.0.1j库。
我的配置选项是
./Configure dist -no-ssl2 -no-ssl3 -no-comp -no-hw -no-engine
由于错误
,构建失败make[2]: *** No rule to make target `../../include/openssl/engine.h', needed by `rsa_lib.o'.
(备注:使用linux-generic64
代替dist
没有任何区别)
提供选项-no-rsa
会导致dsa_lib.o
投诉。它
禁用RSA和DSA也没有意义,是吗?
我在这里阅读了NEWS文件http://wiki.openssl.org/和问题, 但无法找到解决方案。
有什么建议吗?
除此之外:-no-engine
的实际含义是什么?根据我的理解,
ENGINE是openssl的加密算法的接口。为什么要禁用它呢?
答案 0 :(得分:2)
选项-no-engine导致Android的OpenSSL构建出现问题...
./Configure dist -no-ssl2 -no-ssl3 -no-comp -no-hw -no-engine
您可以安全地省略no-engine
选项。该选项用于减小二进制文件的大小。
-no-engine的实际含义是什么?根据我的理解,ENGINE是......
这是一个好点,我无法回答。但我可以说我已经在维基页面上使用了几年的程序,并且我知道当使用无引擎选项时,OpenSSL仍然有效(编译/链接/运行)。
也许1.0.1j的内容发生了变化。我没有升级(意思是我没有为Android和iOS构建1.0.1j)因为我对Downgrade SCSV不感兴趣以适应浏览器以及他们用SSLv3重试的不安全做法。
使用linux-generic64而不是dist没有区别......
交叉编译脚本(setenv-android.sh)设置Android NDK工具的路径 AND 它设置了一些关键的环境变量。其中,CROSS_COMPILE
ANDROID_DEV
是至关重要的。从setenv-android.sh的尾部开始:
# For the Android toolchain
# https://android.googlesource.com/platform/ndk/+/ics-mr0/docs/STANDALONE-TOOLCHAIN.html
export ANDROID_SYSROOT="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH"
export SYSROOT="$ANDROID_SYSROOT"
export NDK_SYSROOT="$ANDROID_SYSROOT"
export ANDROID_NDK_SYSROOT="$ANDROID_SYSROOT"
export ANDROID_API="$_ANDROID_API"
# CROSS_COMPILE and ANDROID_DEV are DFW (Don't Fiddle With). Its used by OpenSSL build system.
# export CROSS_COMPILE="arm-linux-androideabi-"
export ANDROID_DEV="$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/$_ANDROID_ARCH/usr"
export HOSTCC=gcc
Android的配置通过SYSTEM
和ARCH
获取。 Android启动后,即会使用CROSS_COMPILE
和ANDROID_DEV
。
由于环境变量,您需要做的只是configure no-ssl2 no-ssl3 ...
。
答案 1 :(得分:0)
使用engine.h
构建OpenSSL时,未创建指向no-engine
的符号链接。我刚刚添加了
(cd include/openssl ; ln -s ../../crypto/engine/engine.h .)
到我的构建过程。