wget2源码作为优秀的开源项目,方便开发人员基于http的api接口实现http的一整套逻辑并且提供从socket层的api接口提供开发,由于代码开源,开发人员可对源码进行修改编译做出符合自己项目的应用,本文手把手解决编译过程中遇到的问题
准备工作:准备openssl1.1源码包,wget2-1.99.2源码包,交叉编译工具链,这里我用的是高通的arm-oe-linux-gnueabi-gcc工具链。(建议全局操作使用root权限)
一、使用linux自带的gcc编译
1.openssl1.1.1b安装(推荐使用1.1版本,版本太旧可能无法使用)
使用tar -zxvf openssl-1.1.1b.tar.gz解压压缩包
gcc下的openssl配置config配置较为简单,如下图:
然后执行make && make install等待安装即可,一般gcc模式下安装openssl不会出现编译报错。
2.联合安装wget2源码
在安装完成openssl1.1.1b之后下载wget2安装包(注意这两个文件都要下载,否则会编译报错)
使用tar -zxvf wget2-1.99.2.tar.gz解压压缩包进入目录后执行操作:
如果需要指定安装路径可以使用--prefix=/path,执行操作后可以看到(这里选择默认安装):
联合编译中SSL/TLS support: openssl必须支持,如果不支持请检查openssl安装及wget的配置是否正确
配置完成后执行 make && make install便可安装成功,笔者在gcc编译过程中没有遇到问题安装成功后测试:
如果你的安装指定安装路径,那么需要进入到安装的目录下找到bin文件在目录下运行wget2,或者将安装目录配置到环境变量中指令为:#export PATH=$PATH:/安装路径
二、交叉编译工具链编译
1.交叉编译工具链的安装
笔者所用的交叉编译工具链是高通mdm9607芯片的工具链,是免安装版的,建议将交叉编译工具链放置在usr/local/arm目录下。交叉编译工具链安装成功后建议做一下简单的测试看看编译工具链是否可用 arm-oe-linux-gnueabi-gcc -v可以看到版本号。
2.配置环境变量:
网上对于配置环境变量的方法有很多,大家可以自行百度配置
这里我提供一个方法作为参考:root权限下 vi /root/.bashrc这个文件在文件末尾加上export PATH=$PATH:/usr/local/arm/fibo_crosstools/sysroots/x86_64-linux/usr/bin/arm-oe-linux-gnueabi
保存退出
然后执行source /root/.bashrc 通过下面的指令查看是否配置成功:
3.交叉编译openssl1.1.1b
配置config后make clean之后再make发现报错了
这里需要打开Makefile: vi Makefile增加这处修改后保存退出,这里需要说明的是根据个人的交叉编译工具链具体调整
之后执行make && make install就不会再有错误啦~
4.联合编译wget2
执行这条指令后可看到:
编译链为交叉编译工具链,ssl support :openssl
然后执行make && make install即可安装成功,交叉编译生成的wget2应用需要在目标板上跑,这里不做演示,安装成功后在安装目录下执行该应用会出现以下提示:
笔者认为wget2的优秀不在于wget2应用本身,而是在于
这几个开源库函数,开发者可以利用wegt.h提供的api接口配合这些库使用,可以快速的实现网络协议栈的快速开发,尽管这些库目前仍然存在些许不足,但是开发者可以通过修改源码的方式对库函数进行修改来达到快速开发的目的。
最后:如果你的电脑按照我说的方法出现错误,建议在安装openssl和wget2时不指定安装路径,可以避免一些错误,最后祝你成功~
笔者最后有一些要说的:wget2目前还不完善(也许是我个人理解不到位),可以使用,但是有一些问题是需要注意的,wget2库函数在使用过程中发现我在连接https时无法成功这里需要修改两处源码,仅供参考:vi ./libwget/net.c,增加红框出代码
并且该版本https的双向认证提供的load证书的接口有问题,需要读者在源码的相应位置增加http证书的load方法才可以调用https证书导入的相关函数。