最近需要做的东西涉及到了新东西——civetweb框架
笔记有待整理
----------------------------差点忘记了,这就来补---------------------------------------------
环境背景:本文皆在Ubuntu18.04系统下进行测试
CivetWeb框架介绍
CivetWeb 是一个易于使用、功能强大、C/C++可嵌入的网络服务器,具有可选的 CGI、SSL 和 Lua 支持。
CivetWeb 可被开发人员用作库,以便将 Web 服务器功能添加到现有应用程序中
最终用户还可以将其用作独立的 Web 服务器。它可作为单个可执行项提供,无需安装。
civetweb源码下载
下载地址:civetweb
-
压缩包==.zip==download下载,点击右上角的Code->Download ZIP
-
使用git工具下载(Linux中常用,Windows也一样)
将上图中红框里面的URL(网址)复制,在终端输入git clone URL即可
Linux使用安装
这部分……没太理解
- 进入刚才下载好的目录,
- make help
- make
- make install
- 在/usr/local/bin/下能找到civetweb的可执行文件,其对应的配置文件在/usr/local/etc/civetweb.conf
- 配置文件的运行参数中:
- document_root:表示civetweb读取的路径,设置为对应的网页路径
- listening_ports:为civetweb监听的端口号,如http的80端口,https的443等
- ssl_certificate:设置server.pem的路径,上述操作下产生在/usr/local/bin/server.pem
- 配置文件的运行参数中:
环境配置
一开始我以为下载后就可以直接编译使用的,但事实证明是我太天真了,遇到的问题会在后面讲明
我这里只是进行了学习,还没使用到开发板上,所以我这里的环境只需要构建openssl的加密库和交叉编译工具链arm-none-linux-gnueabi-gcc即可
安装建议就是安装openssl-1.0.2版本的,新版本的很多函数更新了,后面会出问题
openssl
-
进入openssl下载网页 openssl ,进入download页面,选择old realease,选择你想要的版本库(这里我选择1.0.2),再选择你需要的版本(这里我用的是红框下的)下载即可
- 关于怎么将文件从Windows传入ubuntu
- 使用sz/rz(下载/上传)指令:sudo apt-get install lrzsz,安装后在虚拟机中打开终端,输入rz,在打开的文件管理器中选择需要上传的文件即可,关于lrzsz的详情其他博主写的十分详细
- vmware虚拟机使用共享文件夹:参考其他博主
- 使用xftp:参考连接 Xhell远程连接虚拟机
- 关于怎么将文件从Windows传入ubuntu
-
解压
这里将压缩包拷贝转义到路径 /usr/local/src ,路径可由自己选择,后面的路径跟着对应就好
sudo tar -xzvf openssl-1.0.2.tar.gz
-
编译安装
进入到解压后的文件目录中
cd openssl-1.0.2 sudo ./config --prefix=/usr/local/openssl sudo make sudo make install
-
建立连接
这个不建立连接的话,后期可能会报错——头文件缺失
sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
-
查看版本验证
openssl version
交叉编译
这里安装直接参考的其他博主的,链接放这 arm-none-linux-gnueabi安装
civetweb编译步骤——示例使用
编译流程
- 获取所有支持的 make 选项的列表
make help
- 编译代码。 使用选项“WITH_ALL=1”启用所有可选功能。
make build make WITH_ALL=1
这里我碰到一个问题就是头文件缺失
解决方法就是安装对应的包——sudo apt-get install libz-dev
安装后再执行无错误
- 安装
sudo make install
- 构建静态库和共享库。 附加的 make 选项就像配置应用程序一样配置库。
make lib WITH_IPV6=1 make clean slib WITH_LUA=1 WITH_WEBSOCKET=1
- 清理构建过程中生成的文件
make clean
-
可以使用 make 命令在命令行上设置 make 选项
这里的具体参数可以在官网的building.md 文档中查找
make build WITH_LUA=1
-
若更改安装目标的话,执行以下(目录位置可换)命令
make build
以下命令查看是否能正常安装
make -n install PREFIX=/opt/civetweb
若输出如下,则执行
sudo make install PREFIX=/opt/civetweb
-
设置编译标志
make build COPT="-DNDEBUG -DNO_CGI"
-
交叉编译
make CC=arm-none-linux-gnueabi-gcc COPT="-march=armv7-a -mfpu=vfp -mfloat-abi=softfp" TARGET_OS=FROG
编译示例碰到的问题
- 对示例embedded_c进行make时,访问头文件中结构体失败
这里就是前面环境配置时说会碰到的问题之一,由于我一开始安装openssl使用的时apt进行的在线安装,安装的是最新的版本1.1.1,查看1.1.1中的头文件dh.h中发现已经没有了这一系列的结构体的定义,应该是新版本进行了函数,结构体的更新,这是很明显的版本不兼容问题,所以前面我建议直接安装openssl-1.0.2
- 上一个问题解决后,新问题又来了——典型的配置大杂烩之头文件缺失
这类问题是最好解决的了,缺啥补啥
sudo search krb5 sudo apt-get install libkrb5-dev
第一个命令为查找库中是否还存在这个数据包,输出的显示中有
则执行安装命令
这里我安装过程中也碰到了奇奇怪怪的问题,现在也没弄懂,我之前更换了清华源,然后这里安装就一直报错,更换回原来的源之后就没问题了,懂得大佬告知我一下,谢谢
他提示的两个方法我也用过,也解决不了才更换回原来的源(上面的截图都是已经更换后的截图)
更换源的操作可以参考 ubuntu更换清华源
- openssl版本冲突问题
这是因为之前我在线安装了openssl-1.1.1版本,但是没卸载干净,然后又源码安装了openssl-1.0.2版本,导致编译时系统查找库检索出错
解决方法就是把不需要的版本库进行屏蔽——直接将对应的库文件更名,让系统找不到他
mv /usr/include/x86_64-linux-gnu/openssl/opensslconf.h /usr/include/x86_64-linux-gnu/openssl/opensslconf.h.bak
最后编译的输出结果如下,可以对照着源码进行参考分析,今天学的就到这了,之后再把分析的笔记添上来
生活不止眼前的苟且,它一样没有诗和远方
-------------------------------简单学习后,自己写了个小测试------------------------------------------
然后问题又出现了,就很烦
这次的问题仍然跟这个openssl有关
发生这个错误的原因就是因为openssl-1.1.1版本中很多函数已更新,而我使用的civetweb是旧一版本的,所以出现了未定义引用的错误
解决方法:目前还没整,早知如今,当初就不该想着用新的openssl