日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

ARM-Linux下交叉编译opessl-1.0.0

發(fā)布時(shí)間:2023/12/10 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ARM-Linux下交叉编译opessl-1.0.0 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?本次任務(wù)是要完成嵌入式Linux下對(duì)openssl程序的支持。
??? 我的開發(fā)環(huán)境:ARM9開發(fā)板 和 嵌入式Linux操作系統(tǒng)。裝有Linux系統(tǒng)(我的是ubuntu9.04)的PC機(jī)一臺(tái)。串口和串口連接線。串口調(diào)試軟件: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
? ? 解釋一下這里的參數(shù): config就是配置腳本,這里不多說了。no-asm是在交叉編譯過程中不使用匯編代碼代碼加速編譯過程.原因是它的匯編代碼是對(duì)arm格式不支持的。我試過了,如果沒有這個(gè)參數(shù),你的交叉編譯一定出錯(cuò)。shared生成動(dòng)態(tài)連接庫。prefix=路徑? 就是你的安裝目錄。安裝完成后在這個(gè)目錄下會(huì)有四個(gè)文件夾:bin lib include ssl。這四個(gè)目錄非常重要,openssl編程就需要這些目錄的配合。
? ? 配置完成后我們還要修改Makefile文件(或許有更好的辦法不用修改Makefile,這里請(qǐng)高手指點(diǎn))。修改如下:

? ? ????

? 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。
? 修改好了以后執(zhí)行命令:? opensl-1.0.0$ make

? 要編譯5分鐘左右,慢慢等吧。
? 然后在輸入命令:??
opensl-1.0.0$ make install

? 沒有錯(cuò)誤!恭喜了,安裝成功。

? 接下來就使用openssl來編程把。

? 我在網(wǎng)上找了一段程序,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庫.所以我寫了一個(gè)Makefile文件來執(zhí)行它:

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

???? 在程序目錄下執(zhí)行make命令,編譯通過!
??? 注意:這里有一個(gè)的問題:就是在我的Makefile文件里L(fēng)IBS的定義。它定義了兩個(gè)靜態(tài)庫文件:libssl,libcrypto.這兩個(gè)庫文件的順序不可以顛倒。必須先加入libssl庫,再加入libcrypto庫.
??? 把hello文件下載到開發(fā)板里,執(zhí)行 ./hello,結(jié)果如下:

student name :? zcp
sutdent age? :? 0
student otherinfo :???? no info
恭喜了,開始你的嵌入式openssl開發(fā)之旅把!

總結(jié)

以上是生活随笔為你收集整理的ARM-Linux下交叉编译opessl-1.0.0的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。