系统环境:Ubuntu 14 4.4.0-31-generic
源码:openssl-1.0.2l.tar.gz
交叉编译环境:arm-linux-gnueabihfhf-
[femx@virtual-machine]# tar-xzvf openssl-1.0.2l.tar.gz
[femx@virtual-machine]# cd openssl-1.0.2l
[root@virtual-machine]# ./configno-asm shared –prefix=/usr/local/ssl-arm
no-asm是在交叉编译过程中不使用汇编代码代码加速编译过程.原因是它的汇编代码是对arm格式不支持的
shared生成动态连接库
--prefix指定make install后生成目录的路径,不修改此项则默认为OPENSSLDIR目录(/usr/local/ssl-arm)
配置完成后修改Makefile文件,CC=和--host=无效
#CC=gcc
CC= arm-linux-gnueabihf-gcc
删除 CFLAG= 中的-march=i486
必须删除掉,默认的是x486体系,即使设置了交叉编译环境,还是会默认这个体系
EX_LIBS=-ldl
#AR=ar $(ARFLAGS) r
AR=arm-linux-gnueabihf-ar $(ARFLAGS) r
#RANLIB= /usr/bin/ranlib
RANLIB=arm-linux-gnueabihf-ranlib
#NM= nm
NM=arm-linux-gnueabihf-nm
[root@vm14]# make
[root@vm14]# makeinstall
安装成功
交叉编译后的动态库文件在/usr/local/ssl-arm目录
[femx@vm14]: /usr/local/ssl-arm]#ls
bin certs include lib man misc openssl.cnf private
查看库文件格式
[femx@vm14 /usr/local/ssl-arm/lib]# readelf-h libssl.so
ELF 头:
Machine: ARM
编译test实例
- #include <stdio.h>
- #include <openssl/sha.h>
- int main ()
- {
- SHA_CTX s;
- int i, size;
- char c[512];
- unsigned char hash[20];
- // 初始化 SHA Contex, 成功返回1,失败返回0
- SHA1_Init(&s);
- // 循环调用此函数,可以将不同的数据加在一起计算SHA1,成功返回1,失败返回0
- while ((size=read (0, c, 512)) > 0)
- SHA1_Update(&s, c, size);
- // 输出SHA1结果数据,成功返回1,失败返回0
- SHA1_Final(hash, &s);
- for (i=0; i < 20; i++)
- printf ("%.2x", (int)hash[i]);
- printf ("\n");
- } <openssl/sha.h>
ntmain (){ SHA_CTX s; int i, size; char c[512]; unsigned char hash[20]; // 初始化 SHA Contex, 成功返回1,失败返回0 SHA1_Init(&s); // 循环调用此函数,可以将不同的数据加在一起计算SHA1,成功返回1,失败返回0 while ((size=read (0, c, 512)) > 0) SHA1_Update(&s, c, size); // 输出SHA1结果数据,成功返回1,失败返回0 SHA1_Final(hash, &s); for (i=0; i < 20; i++) printf ("%.2x", (int)hash[i]); printf ("\n");}[femx@vm14]#arm-linux-gnueabihf-gcc sha1_test.c -I/usr/local/ssl-arm-arm/include/ -L/usr/local/ssl-arm/lib-lssl -lcrypto -ldl -o sha1_test.out
编译通过,在当前目录生成sha1_test.out可执行文件
将/usr/local/ssl-arm/lib目录下的所有文件和pkgconfig,engines目录都拷贝到ARM设备上文件系统的/lib目录,
将sha1_test.out拷贝到ARM设备上
执行./sha1_test.out < sha1_test.out
输出:78b32a7882a5ffea5d48b2f2b6bea633fa78e0e1
移植成功。