openssl客户端程序移植到arm平台

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

openssl客户端程序移植到arm平台
此文章写的很详细,将中间每一步出现问题的原因写的很清楚
openssl 客户端程序如何移植到arm平台上运行?
在我的项目中拥有一个服务器程序file_server和一个客户端程序file_client,它们实现了通过安全套接字层传输文件的功能。

原本两个程序都在pc上运行,现在要把客户端程序移植到arm平台上。

原来makefile中生成客户端程序的规则是这样的:
gcc file_client.c -o file_client -lssl -lpthread
如果想移植到arm平台是不是直接将 gcc 改为 arm-linux-gcc就可以了呢?回答是不行的,原因在于-lssl连接的库libssl.a或 libssl.so 原本是在x86的环境下编译生成的,所以直接arm-linux-gcc file_client.c -o file_client -lssl -lpthread会提示搜索到的库格式不对。

因此应该重新编译openssl,步骤如下:
1.config:
#config no-asm (忽略x86汇编部分)
2.改Makefile
1) CC= gcc 改成 CC = arm-linux-gcc;
2)删除CFLAG= 中的“-march=pentium”;(如果有的话)
3) AR=ar $(ARFLAGS) r 改为 AR=arm-linux-ar $(ARFLAGS) r;
4)ARD=ar $(ARFLAGS) d 改为ARD=arm-linux-ar $(ARFLAGS) d;
5)RANLIB= /usr/bin/ranlib 改为RANLIB= arm-linux-ranlib;
3.编译
#make
编译完成后会产生libssl.a和libcrypto.a两个归档文件,将这两个文件copy到客户端代码目录下,直接和源文件进行编译:
arm-linux-gcc file_client.c -o file_client libcryto.a libssl.a -lpthread
这时会出现:error:openssl/ssl.h: No such file or directory的错误,这显然是因为我们的arm-linux-gcc编译器没有把x86环境下的/usr/include作为标准头文件搜索目录的缘故。

(原来在pc机上装x86的openssl时,将openssl的头文件install到这个目录)我们可以加上一个选项:-I/usr/include
这时按照:
arm-linux-gcc file_client.c -o file_client libcryto.a libssl.a -lpthread-I/usr/include
进行编译,又会冒出一大堆的:undefined refrence to ' ' 错误。

符号未定义?可以头文件都包含进来了啊?仔细分析另一种可能的原因是库的使用,准确的说是库的编译顺序,libssl.a用到很多符号,而这些符号只在libcryto.a定义或申明,那么libcrypto.a应该出现在libssl.a的后面。

arm-linux-gcc file_client.c -o file_client libssl.a libcryto.a -lpthread-I/usr/include
这时还会提示:undefined refrence to ' dlopen' ,再将libdl.a(用于加载动态库方法的库)包含进去即可。

最终编译命令:
arm-linux-gcc file_client.c -o file_client libssl.a libcryto.a -lpthread -I/usr/include -ldl -static
将生成的可执行程序file_client拷贝到开发板,chmod 777 file_client修改权限,在pc上运行服务器程序,在开发板上运行客户端程序即可,下面给出我的程序在OK6410上的运行效果图:
1.运行客户端程序:
2.使用cd home切换客户端目录:
3.下载服务器上的文件serv.cpp
4.下载完成
5.屏幕刷新后,可见客户端home目录下多出的文件serv.cpp。

相关文档
最新文档