之前在网上找了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
OPENSSL_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) $(OPENSSL_OPTIONS) $(CROSS_PLATFORM)
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


2115

被折叠的 条评论
为什么被折叠?



