ARM-Linux下交叉编译opessl-1.0.0

 本次任务是要完成嵌入式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开发之旅把!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/432778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

modf函数C语言,C / C ++中的modf()

该函数modf()用于将传递的参数拆分为整数和小数。在“ math.h”头文件中声明该变量以进行数学计算。它返回传递的参数的分数值。这是modf()C语言的语法&#xff0c;double modf(double value, double *integral_pointer);这里&#xff0c;值-分为整数和分数的值。积分指针-分割…

codeforces #236 div2 简洁题解

A:A. Nutstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputYou have a nuts and lots of boxes. The boxes have a wonderful feature: if you put x (x ≥ 0)divisors (the spacial bars that can divide a box) to…

南京大学c语言试卷,2007年4月南京大学C语言期中试题.doc

2007年4月南京大学C语言期中试题南京大学《C语言程序设计》期中试卷(2006年4月15日)系科 学号______________姓名_____________成绩_______________注意事项&#xff1a;1、答案均写在答题纸上&#xff0c;写在卷面上无效;2、答题结束后将试卷及答题纸全部交给监考教师;3、闭卷…

web通信 长连接、长轮询

http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html转载于:https://www.cnblogs.com/kszit/p/3605340.html

V210 SPI驱动分析

对于总线设备驱动&#xff0c;是需要分别创建设备和驱动两个结构体&#xff0c;然后根据name&#xff0c;互相匹配&#xff0c;匹配成功后&#xff0c;调用 驱动的probe函数&#xff0c;然后创建设备文件&#xff0c;实现驱动的业务逻辑。 因此&#xff0c;我们就以设备和驱动…

android 有值代码,Android:如何在代码中获取“listPreferredItemHeight”属性的值?

这样做&#xff1a;TypedValue value new TypedValue();((Activity)context).getTheme().resolveAttribute(android.R.attr.listPreferredItemHeight, value, true);编辑&#xff1a;由于尚未正确初始化DisplayMetrics实例&#xff0c;因此您将获得零值。它需要一个参考框架(显…

android 多个按钮响应,处理Android Recyclerview中的多个按钮单击并将响应存储在Array或ArrayList中...

我正在设计在线测验App。我设计了PlayQuiz.java文件如下&#xff1a;public class PlayQuiz extends AppCompatActivity {private RecyclerView recyclerView;DataBaseHelper database;private List quizList;private QuizAdapter adapter;Overrideprotected void onCreate(Bun…

密码学中的“盐值 Salt”

盐&#xff08;Salt&#xff09; 在密码学中&#xff0c;是指通过在密码任意固定位置插入特定的字符串&#xff0c;让散列后的结果和使用原始密码的散列结果不相符&#xff0c;这种过程称之为“加盐”。 以上这句话是维基百科上对于 Salt 的定义&#xff0c;但是仅凭这句话还是…

android 主线程调用,Android 主线程和线程之间相互发送消息

通过分析Activity源码&#xff0c;我们知道每个Activity都有一个Looper&#xff0c;所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop()&#xff0c;但是线程是不带Looper的&#xff0c;当线程要接收来自主线程的消息是就需要调用Looper.prepare()和Looper.l…

10 个十分难得的 javascript 开发经验

Javascript 的很多扩展的特性是的它变得更加的犀利&#xff0c; 同时也给予程序员机会创建更漂亮并且更让用户喜欢的网站。 尽管很多的开发人员都乐于颂扬 javascript&#xff0c;但是仍旧有人看到它的阴暗面。 使用很多 javascript 代码的 web 页面会加载很慢&#xff0c;过多…

简单的UTF8编码生成

用记事本建一个文件&#xff0c;用editplus打开&#xff0c;并转成UTF8格式 然后写中文字符 然后用ultraEdit打开&#xff0c;切换到16机制模式即可

android unzip file,Unzip File in Android Assets

可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效&#xff0c;请关闭广告屏蔽插件后再试):问题:I put a zip file in the android assets. How do i extract the file in the android internal storage? I know how to get the file, but i dont know how t…

Eclipse安装ADT失败解决办法

Eclipse的版本是3.5.2&#xff0c;配置Android的开发环境时遇到问题…… 按照Android官方文档一步步安装&#xff0c;到了安装Eclipse的ADT插件时&#xff0c;提示“requires org.eclipse.gef 0.0.0 but it could not be found” 缺少GEF&#xff0c;Eclipses Graphic Editing …

DM3730 LCD控制器驱动框架

一般来说&#xff0c;linux的LCD控制器驱动是分两个层次 1) fbmem.c 一个linux内核通用的LCD控制器层&#xff0c;没有任何硬件信息&#xff0c;而且不创建设备文件。 它提供的最重要的接口函数是register_framebuffer 2) 特定芯片的LCD控制器硬件驱动代码&#xff0c;他来调…

html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

JS仿QQ好友列表展开、收缩功能(第一篇)发布时间&#xff1a;2020-10-17 14:20:03来源&#xff1a;脚本之家阅读&#xff1a;96作者&#xff1a;erdouzhang效果图如下所示&#xff1a;html:我的好友张三李四...企业好友小明小红...黑名单哈哈...css&#xff1a;ul,h3 {padding: …

Visual Studio 选择相同变量高亮

前段时间一直在使用matlab&#xff0c;今天需要使用vs2008&#xff0c;而用惯了matlab&#xff0c;习惯了其中一项选中变量高亮的设置&#xff0c;突然回来使用VS&#xff0c;感到各种不适应&#xff0c;顿时想到了一个词&#xff1a;矫情 呵呵&#xff0c;于是在网上找各种插件…

V210调整根分区大小

1. 修改uboot common/mmc_cmd_fdisk.c #define SYSTEM_PART_SIZE (120*1024*1024) 将120改成256 2. 在dd文件系统的时候&#xff0c;增大count dd if/dev/zero ofrootfs_qt4.ext3 bs1024 count262144 重烧系统的时候&#xff0c;需要先烧入uboot&#xff0c;然后重启再烧入…

html中怎么写jq,用jQuery替换HTML页面中的文本

如何替换jQuery中的任何字符串&#xff1f;假设我有一个字符串"-9o0-9909"&#xff0c;我想用另一个字符串替换它。在问问题之前如何使用jQuery将HTML块替换为HTML块的可能重复&#xff0c;最好检查一下系统在输入问题标题时提出的自动建议您能否详细说明为什么您认为…

asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)...

asp.net使用post方式action到另一个页面&#xff0c;在另一个页面接受form表单的值&#xff01;&#xff08;报错&#xff0c;已解决&#xff01;&#xff09; 原文:asp.net使用post方式action到另一个页面&#xff0c;在另一个页面接受form表单的值&#xff01;&#xff08;报…

Qt中translate、tr关系 与中文问题

Qt中translate、tr关系 与中文问题2010-09-22 00:15题外话&#xff1a;何时使用 tr &#xff1f; 在论坛中漂&#xff0c;经常遇到有人遇到tr相关的问题。用tr的有两类人&#xff1a; (1)因为发现中文老出问题&#xff0c;然后搜索&#xff0c;发现很多人用tr&#xff0c;于是他…