本次任务是要完成嵌入式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.0
        openssl-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= gcc
 63 CC = arm-unknown-linux-gnu-gcc
 64 #CFLAG= -fPIC -DOPENSSL_PIC -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAV    E_DLFCN_H -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
 65 CFLAG= -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DOPENSSL_N    O_KRB5 -DL_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall
 66 DEPFLAG= -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_R    C5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_STORE
 67 PEX_LIBS=
 68 EX_LIBS= -ldl
 69 EXE_EXT=
 70 ARFLAGS=
 71 #AR= ar $(ARFLAGS) r
 72 AR = arm-unknown-linux-gnu-ar $(ARFLAGS) r
 73 RANLIB = arm-unknown-linux-gnu-ranlib
 74 #RANLIB= /usr/bin/ranlib
 75 #NM= nm
 76 NM = arm-unknown-linux-gnu-nm
 77 PERL= /usr/bin/perl
 78 TAR= tar
 79 TARFLAGS= --no-recursion
 80 MAKEDEPPROG= gcc
 81 LIBDIR=lib

即使用交叉编译工具去编译openssl。
  修改好了以后执行命令:  opensl-1.0.0$ make

要编译5分钟左右,慢慢等吧。
  然后在输入命令:   opensl-1.0.0$ make install

没有错误!恭喜了,安装成功。

接下来就使用openssl来编程把。

我在网上找了一段程序,openssl栈的编程:myssl.c:

#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;
}


这里要用到安装目录下的include 和 lib库.所以我写了一个Makefile文件来执行它:

COMPILE := arm-unknown-linux-gnu-
CC := $(COMPILE)gcc
CFLAGS := -Wall -O2
CFLAGS += -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

在程序目录下执行make命令,编译通过!
    注意:这里有一个的问题:就是在我的Makefile文件里LIBS的定义。它定义了两个静态库文件:libssl,libcrypto.这两个库文件的顺序不可以颠倒。必须先加入libssl库,再加入libcrypto库.
    把hello文件下载到开发板里,执行 ./hello,结果如下:

student name :  zcp
sutdent age  :  0
student otherinfo :     no info
恭喜了,开始你的嵌入式openssl开发之旅把!

ARM-Linux下交叉编译opessl-1.0.0相关推荐

  1. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析

    C/C++等底层语言在提供强大功能及性能的同时,其灵活的内存访问也带来了各种纠结的问题.如果crash的地方正是内存使用错误的地方,说明你人品好.如果crash的地方内存明显不是consistent的 ...

  2. LINUX 下构建OpenGL ES 3.0

    Ubuntu LINUX 下构建OpenGL ES 3.0 Category : OpenGL LINUX 下构建OpenGL ES 3.0 软件:PowerVRSDKSetup-4.0.run-x6 ...

  3. Zedboard学习(二):zedboard的Linux下交叉编译环境搭建

    环境准备 首先肯定是要下载xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,这是官方提供的linux下交叉编译链安装文件,下载地址为:https://p ...

  4. ARM Linux下UPnP使用

    ARM Linux下UPnP使用   一.UPnP简介   UPnP(Universal Plug and Play)技术是一种屏蔽各种数字设备的硬件和操作系统的通信协议.它是一种数字网络中间件技术, ...

  5. linux pfn,ARM Linux下的page和pfn之间转换的宏。

    ARM Linux下的page和pfn之间转换的宏如下: 1)page_to_pfn 2)pfn_to_page 这两个宏依赖于内核编译时,选择的内存模型.在include/asm-generic/m ...

  6. linux-arm下如何开启tftp传输,arm linux 下移植busybox 的tftp

    (1)进入busybox目录,make menuconfig ,然后在networking中勾选tftp项跟tftpd项. (2)配置/etc/inetd.conf 中关于tftp的选项(此部未验证, ...

  7. linux下交叉编译date命令,arm移植NTP(同步嵌入式linux系统时间)

    一.说明 网络时间协议Network Time Protocol(NTP) 是一种确保时钟保持准确的方法.如果可以访问互联网,只需安装ntp的客户端软件到互联网上的公共ntp服务器自动修正时间即可 二 ...

  8. Google Nexus5在linux下刷原生安卓 android6.0

    之前将Nexus5刷成了MIUI系统,现在想体验一下安卓6.0,网上都是windows的教程,但如何在linux下刷机呢? 首先准备环境和工具: 1. 我的linux系统是lubuntu 15.10 ...

  9. Linux下如何安装MySQL 5.0

    最清晰的,参见百度文库:http://wenku.baidu.com/view/571968976bec0975f465e25b.html ============================== ...

  10. linux下多进程聊天室,从0实现基于Linux socket聊天室-多线程服务器模型-1

    前言 Socket在实际系统程序开发张中,应用非常广泛,也非常重要.实际应用中服务器经常需要支持多个客户端连接,实现高并发服务器模型显得尤为重要.高并发服务器从简单的循环服务器模型处理少量网络并发请求 ...

最新文章

  1. R语言stringr包str_dup函数字符串多次复制实战
  2. SqlDependency学习笔记
  3. cxf restful
  4. Abbreviation
  5. springboot 配置双mysql数据库
  6. 目标检测--Selective Search for Object Recognition(IJCV, 2013)
  7. 数据库-优化-慢查日志分析工具-pt-query-digest介绍及作用
  8. 【机器学习】机器学习一些概念的整理(不断更新中)
  9. 移动路由器刷linux,Linux小课堂开课了(7)-三线IP刷路由-移动-联通-电信
  10. 用iframe框架,登录过期后登录框在框架里加载的问题
  11. SQLite 插入大量数据慢的解决方法
  12. 计算机弹琴游戏,电脑键盘钢琴软件(弹钢琴小游戏)
  13. SOCK/HTTP代理协议解析
  14. error C1041: 无法打开程序数据库“xxx\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用/FS
  15. EndNoteX9保姆级基础功能使用教程(够用!!)
  16. 被历史遗忘的第一骑兵名将 —— 陈庆之
  17. 翡润年华教你肉眼鉴别翡翠ABC
  18. Linux学习和阿里云服务器的配置(感谢秦老师)
  19. python培训班怎样收费
  20. Android 使用ADB命令向上滑动解锁

热门文章

  1. 华为手机记事本导出_深夜浅谈怎样用一部手机做电影解说?
  2. centos7 编译安装nginx 设置自启动服务 支持https
  3. Java开发神器Lombok使用详解
  4. Java中的Type接口和Class类有什么区别
  5. mysql中新建不了查询语句_将excel和mysql建立链接后,如何通过在excel里面执行mysql查询语句,然后建立查询...
  6. vue中的数据单向绑定,判断,循环,函数
  7. (Java)Character类
  8. unix修改服务器时间格式,处理unix中的日期格式
  9. Linux 常用的帮助命令
  10. Nginx----高级