ARM-Linux下交叉编译opessl-1.0.0
2015-09-19 14:14
453 查看
本次任务是要完成嵌入式Linux下对openssl程序的支持。我的开发环境:ARM9开发板 和 嵌入式Linux操作系统。装有Linux系统(我的是ubuntu9.04)的PC机一台。串口和串口连接线。串口调试软件:minicom。交叉编译工具:arm-unknown-linux-gnu-gcc下载最新版本的openssl-1.0.0:http://www.openssl.org/source/解压:$tar -xzvf openssl-1.0.0.tart.gz$cd openssl-1.0.0openssl-1.0.0$ ./config no-asm shared prefix=/home/lanpeng/arm-openssl解释一下这里的参数: config就是配置脚本,这里不多说了。no-asm是在交叉编译过程中不使用汇编代码代码加速编译过程.原因是它的汇编代码是对arm格式不支持的。我试过了,如果没有这个参数,你的交叉编译一定出错。shared生成动态连接库。prefix=路径 就是你的安装目录。安装完成后在这个目录下会有四个文件夹:bin lib include ssl。这四个目录非常重要,openssl编程就需要这些目录的配合。配置完成后我们还要修改Makefile文件(或许有更好的办法不用修改Makefile,这里请高手指点)。修改如下:62 #CC= gcc63 CC = arm-unknown-linux-gnu-gcc64 #CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAV E_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall65 CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_N O_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall66 DEPFLAG= -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_R C5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE67 PEX_LIBS=68 EX_LIBS= -ldl69 EXE_EXT=70 ARFLAGS=71 #AR= ar $(ARFLAGS) r72 AR = arm-unknown-linux-gnu-ar $(ARFLAGS) r73 RANLIB = arm-unknown-linux-gnu-ranlib74 #RANLIB= /usr/bin/ranlib75 #NM= nm76 NM = arm-unknown-linux-gnu-nm77 PERL= /usr/bin/perl78 TAR= tar79 TARFLAGS= --no-recursion80 MAKEDEPPROG= gcc81 LIBDIR=lib即使用交叉编译工具去编译openssl。修改好了以后执行命令: opensl-1.0.0$ make要编译5分钟左右,慢慢等吧。然后在输入命令: opensl-1.0.0$ make install没有错误!恭喜了,安装成功。接下来就使用openssl来编程把。我在网上找了一段程序,openssl栈的编程:myssl.c:
这里要用到安装目录下的include 和 lib库.所以我写了一个Makefile文件来执行它:
在程序目录下执行make命令,编译通过!注意:这里有一个的问题:就是在我的Makefile文件里LIBS的定义。它定义了两个静态库文件:libssl,libcrypto.这两个库文件的顺序不可以颠倒。必须先加入libssl库,再加入libcrypto库.把hello文件下载到开发板里,执行 ./hello,结果如下:student name : zcpsutdent age : 0student otherinfo : no info恭喜了,开始你的嵌入式openssl开发之旅把!
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <openssl/safestack.h> #define sk_Student_new(st) SKM_sk_new(Student, (st)) #define sk_Student_new_null() SKM_sk_new_null(Student) #define sk_Student_free(st) SKM_sk_free(Student, (st)) #define sk_Student_num(st) SKM_sk_num(Student, (st)) #define sk_Student_value(st, i) SKM_sk_value(Student, (st), (i)) #define sk_Student_set(st, i, val) SKM_sk_set(Student, (st), (i), (val)) #define sk_Student_zero(st) SKM_sk_zero(Student, (st)) #define sk_Student_push(st, val) SKM_sk_push(Student, (st), (val)) #define sk_Student_unshift(st, val) SKM_sk_unshift(Student, (st), (val)) #define sk_Student_find(st, val) SKM_sk_find(Student, (st), (val)) #define sk_Student_delete(st, i) SKM_sk_delete(Student, (st), (i)) #define sk_Student_delete_ptr(st, ptr) SKM_sk_delete_ptr(Student, (st), (ptr)) #define sk_Student_insert(st, val, i) SKM_sk_insert(Student, (st), (val), (i)) #define sk_Student_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(Student, (st), (cmp)) #define sk_Student_dup(st) SKM_sk_dup(Student, st) #define sk_Student_pop_free(st, free_func) SKM_sk_pop_free(Student, (st), (free_func)) #define sk_Student_shift(st) SKM_sk_shift(Student, (st)) #define sk_Student_pop(st) SKM_sk_pop(Student, (st)) #define sk_Student_sort(st) SKM_sk_sort(Student, (st)) typedef struct Student_st { char *name; int age; char *otherInfo; }Student; typedef STACK_OF(Student) Students; Student *Student_Malloc() { Student *a=malloc(sizeof(Student)); a->name=malloc(20); strcpy(a->name,"zcp"); a->otherInfo=malloc(20); strcpy(a->otherInfo,"no info"); return a; } void Student_Free(Student *a) { free(a->name); free(a->otherInfo); free(a); } static int Student_cmp(Student *a,Student *b) { int ret; ret=strcmp(a->name,b->name); return ret; } int main() { Students *s,*snew; Student *s1,*one,*s2; int i,num; s=sk_Student_new_null(); snew=sk_Student_new(Student_cmp); s2=Student_Malloc(); sk_Student_push(snew,s2); i=sk_Student_find(snew,s2); s1=Student_Malloc(); sk_Student_push(s,s1); num=sk_Student_num(s); for(i=0;i<num;i++) { one=sk_Student_value(s,i); printf("student name : %s\n",one->name); printf("sutdent age : %d\n",one->age); printf("student otherinfo : %s\n\n\n",one->otherInfo); } sk_Student_pop_free(s,Student_Free); sk_Student_pop_free(snew,Student_Free); return 0; } |
COMPILE := arm-unknown-linux-gnu-CC := $(COMPILE)gccCFLAGS := -Wall -O2CFLAGS += -I/home/lanpeng/arm-openssl/include/LIBS := /home/lanpeng/arm-openssl/lib/libssl.a /home/lanpeng/arm-openssl/lib/libcrypto.a%.o: %.c$(CC) $(CFLAGS) -c -o $@ $<hello: zhan.o $(LIBS)$(CC) $(CFLAGS) -o $@ zhan.o -L.$(LIBS)clean:rm -fr *.o hello |
相关文章推荐
- openssl-1.0.0b - libssl 移植到ARM Linux
- Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- Linux下线程同步的几种方法
- CentOS 由 JavaCPP 转让 FFMPEG
- Linux 下的C/C++语言开发环境
- Linux 信号:signal 与 sigaction
- linux下vim的常用指令
- Linux内核升级
- linux 信号
- Linux修改eth2到eth0
- Linux系统定时任务
- 组建自己的Linux-04启动Linux并测试
- Linux初学——管理文件与目录(上)
- linux下软件安装的方法
- 【转】【调试技巧】Linux环境下段错误的产生原因及调试方法小结
- ESP8266 Linux开发环境搭建
- 程序员不常用Linux命令集
- Linux系统挂载操作mount详解
- 组建自己的Linux-03安装grub,提供系统初始化配置
- 读书笔记--鸟哥的linux_2