由于很多地方会用到openssl,所以这里记录一下。baidu了不少,结果都不行,最后google了这篇才可以。参考来自:https://how-to-build-for-arm.wikispaces.com/openssl
下载源码及两个补丁。
wget ftp://ftp.openssl.org/source/openssl-1.0.1g.tar.gz tar -pxzf openssl-1.0.1g.tar.gz wget http://www.linuxfromscratch.org/patches/downloads/openssl/openssl-1.0.1g-fix_parallel_build-1.patch wget http://www.linuxfromscratch.org/patches/downloads/openssl/openssl-1.0.1g-fix_pod_syntax-1.patch
解压后,进入解压后目录,打补丁
cd openssl-1.0.1g/ patch -Np1 -i ../openssl-1.0.1g-fix_parallel_build-1.patch patch -Np1 -i ../openssl-1.0.1g-fix_pod_syntax-1.patch
设置交叉编译环境,这是原文设置,这里需要按自己的交叉编译环境做一点修改。
export INSTALLDIR=~/workbench/gcc-4.8.2/arm export PATH=$INSTALLDIR/bin:$PATH export TARGETMACH=arm-none-linux-gnueabi export BUILDMACH=i686-pc-linux-gnu export CROSS=arm-none-linux-gnueabi export CC=${CROSS}-gcc export LD=${CROSS}-ld export AS=${CROSS}-as export AR=${CROSS}-ar
第一点设定安装目录,因为我们交叉编译出ssl的动态或静态库主要是用于交叉编译器在编译其他使用到ssl的程序连接用(当然也可以拷贝到嵌入式环境中使用)。因此这里把安装目录设置为交叉编译器的连接库目录。
第二个bin目录其实不太需要,我们也可以按这种形式给出。
然后是目标机器(即使用这个文件的机器架构),编译机器,交叉编译器运行的机器。这两条交不是很重要了。最关键的是:交叉编译器,这一定要指明用什么交叉编译器来编译ssl。后面的这些就是gcc,ld,as,ar。
因此,我的配置是:
export INSTALLDIR=/opt/toolchain/aarch64-linux export PATH=$INSTALLDIR/bin:$PATH export TARGETMACH=aarch64-linux export BUILDMACH=i686-pc-linux-gnu export CROSS=aarch64-linux-gnu export CC=${CROSS}-gcc export LD=${CROSS}-ld export AS=${CROSS}-as export AR=${CROSS}-ar
做这个配置的目的是为了在后续执行make的时候能使用交叉编译器。
然后是配置openssl的源码:
./Configure --openssldir=/home/szbaijie/Firmware/third_party_libs/openssl-1.0.1g/final shared os/compiler:aarch64-linux
我们这里使用了shared参数,但是它会提示不知道如何生成aarch64平台下的共享库,因此我们编译出来后只有静态库。
然后是make -j4,但是不要make install,因为我的出问题了。但是我们可以继续进行下一步。因为没有install成功,所以需要把libcrypto.a和libssl.a手动拷贝到final/lib目录下。
然后执行$AR -x libcryto.a 执行不下去了。
再想办法解决。
转载请注明:OpenMind » 交叉编译openssl