openssl静态库交叉编译后能使⽤,⽀持ndk⼯具链编译安卓版
本
之前在⽹上了openssl的交叉编译⽅法,都是./config no-asm shared --prefix=xxx,然后改下makefile中的编译⼯具前缀,接着
make & make install,这样可以编译成功,但我的程序链接openssl静态库之后运⾏,在ssl握⼿的时候会发⽣decode error(抓包看出
来的),⼀直不到解决⽅法。
昨天,通过⼀个友商同事的帮助,他提供了他们编译openssl的makefile,我⽤他们的makefile编译出来的静态库就正常了,我对⽐后抽出
了关键的不同处,重新再编译⼀次,也能够正常运⾏:
./Configure --prefix=/root/openssl-1.0.2p/install_dir shared no-asm linux-generic32
⽣成makefile后同样进⼊makefile修改编译⼯具前缀再make。
也可以直接使⽤下⾯的cross_openssl_makefile:
###放到openssl⽬录下,make -f cross_openssl_makefile CROSS_PREFIX=xxx CROSS_PLATFORM=xxx
###CROSS_PLATFORM⼀般有linux-mips32 linux-generic32 linux-x86_64
makefile phonyOPENSSL_NO_CIPHERS=no-idea no-md2 no-mdc2 no-rc5 no-sha0 no-smime no-rmd160 no-aes192 no-ripemd no-camellia no-ans1 no-krb5
OPENSSL_OPTIONS=shared no-err no-hw no-zlib no-sse2
INSTALL_DIR=$(shell pwd)/install_dir
#CROSS_PREFIX=mipsel-linux
#CROSS_PLATFORM=linux-mips32
OPENSSL=$(shell pwd)
.PHONY:all build config_a
all: build
config_a:
./Configure --cross-compile-prefix=$(CROSS_PREFIX)- --prefix=$(INSTALL_DIR) --openssldir=$(INSTALL_DIR)/etc/ssl -ldl $(OPENSSL_NO_CIPHERS) $(OPEN
build: config_a
echo DIR=$(INSTALL_DIR)
make -C $(OPENSSL) MAKEDEPPROG=$(CROSS_PREFIX)-gcc depend
make -C $(OPENSSL) CC=$(CROSS_PREFIX)-gcc AR="$(CROSS_PREFIX)-ar r" RANLIB=$(CROSS_PREFIX)-ranlib all
make -C $(OPENSSL) CC=$(CROSS_PREFIX)-gcc AR="$(CROSS_PREFIX)-ar r" RANLIB=$(CROSS_PREFIX)-ranlib build-shared
make -C $(OPENSSL) CC=$(CROSS_PREFIX)-gcc do_linux-shared
make -C $(OPENSSL) CC=$(CROSS_PREFIX)-gcc install
不清楚是不是因为加了平台类型linux-generic32的原因,这个暂时还没时间去验证,在此做下记录,也希望能够帮助碰到困难的同学。
我的程序是在路由器上跑的,包含了arm、mips、x86、x64架构,系统为openwrt。
------------------------------------------------------------------------------------------------------------------------------------------
#创建独⽴的⼯具链,才可⽤cross_openssl_makefile编译,--arch可以是'arm', 'arm64', 'mips', 'mips64', 'x86', 'x86_64',
/root/android-ndk-r14b/build/tools/make-standalone-toolchain.sh --install-dir=/tmp/my-android-toolchain/arm --arch=arm
make -f cross_openssl_makefile CROSS_PREFIX=arm-linux-androideabi CROSS_PLATFORM=android-armv7
安卓ndk编译openssl,先把ndk⼯具链独⽴出来,像其他交叉编译⼯具⼀样,使⽤cross_openssl_makefile可以编译出来
arm64的CROSS_PLATFORM=linux-aarch64
mips64的CROSS_PLATFORM=linux-mips64
x86_64的CROSS_PLATFORM=linux-x86_64
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论