civetweb学习

最近需要做的东西涉及到了新东西——civetweb框架
笔记有待整理
civetweb学习_第1张图片
----------------------------差点忘记了,这就来补---------------------------------------------
环境背景:本文皆在Ubuntu18.04系统下进行测试

CivetWeb框架介绍

CivetWeb 是一个易于使用、功能强大、C/C++可嵌入的网络服务器,具有可选的 CGI、SSL 和 Lua 支持。
CivetWeb 可被开发人员用作库,以便将 Web 服务器功能添加到现有应用程序中
最终用户还可以将其用作独立的 Web 服务器。它可作为单个可执行项提供,无需安装。
civetweb学习_第2张图片

civetweb源码下载

下载地址:civetweb

  1. 压缩包==.zip==download下载,点击右上角的Code->Download ZIP
    civetweb学习_第3张图片

  2. 使用git工具下载(Linux中常用,Windows也一样)
    将上图中红框里面的URL(网址)复制,在终端输入git clone URL即可

Linux使用安装

这部分……没太理解

  1. 进入刚才下载好的目录,
  2. make help
  3. make
  4. make install
  5. 在/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
  1. 进入openssl下载网页 openssl ,进入download页面,选择old realease,选择你想要的版本库(这里我选择1.0.2),再选择你需要的版本(这里我用的是红框下的)下载即可
    civetweb学习_第4张图片
    civetweb学习_第5张图片
    civetweb学习_第6张图片

    • 关于怎么将文件从Windows传入ubuntu
      1. 使用sz/rz(下载/上传)指令:sudo apt-get install lrzsz,安装后在虚拟机中打开终端,输入rz,在打开的文件管理器中选择需要上传的文件即可,关于lrzsz的详情其他博主写的十分详细
      2. vmware虚拟机使用共享文件夹:参考其他博主
      3. 使用xftp:参考连接 Xhell远程连接虚拟机
  2. 解压
    这里将压缩包拷贝转义到路径 /usr/local/src ,路径可由自己选择,后面的路径跟着对应就好
    sudo tar -xzvf openssl-1.0.2.tar.gz

  3. 编译安装
    进入到解压后的文件目录中
    cd openssl-1.0.2 sudo ./config --prefix=/usr/local/openssl sudo make sudo make install

  4. 建立连接
    这个不建立连接的话,后期可能会报错——头文件缺失
    sudo ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

  5. 查看版本验证
    openssl version

交叉编译

这里安装直接参考的其他博主的,链接放这 arm-none-linux-gnueabi安装

civetweb编译步骤——示例使用

编译流程
  1. 获取所有支持的 make 选项的列表
    make help
  2. 编译代码。 使用选项“WITH_ALL=1”启用所有可选功能。
    make build make WITH_ALL=1
    civetweb学习_第7张图片

这里我碰到一个问题就是头文件缺失
civetweb学习_第8张图片

解决方法就是安装对应的包——sudo apt-get install libz-dev
安装后再执行无错误

  1. 安装
    sudo make install
  2. 构建静态库和共享库。 附加的 make 选项就像配置应用程序一样配置库。
    make lib WITH_IPV6=1 make clean slib WITH_LUA=1 WITH_WEBSOCKET=1
  3. 清理构建过程中生成的文件
make clean
  1. 可以使用 make 命令在命令行上设置 make 选项
    这里的具体参数可以在官网的building.md 文档中查找
    make build WITH_LUA=1

  2. 若更改安装目标的话,执行以下(目录位置可换)命令
    make build
    以下命令查看是否能正常安装
    make -n install PREFIX=/opt/civetweb
    若输出如下,则执行
    civetweb学习_第9张图片
    sudo make install PREFIX=/opt/civetweb

  3. 设置编译标志
    make build COPT="-DNDEBUG -DNO_CGI"

  4. 交叉编译
    make CC=arm-none-linux-gnueabi-gcc COPT="-march=armv7-a -mfpu=vfp -mfloat-abi=softfp" TARGET_OS=FROG

编译示例碰到的问题

civetweb学习_第10张图片

  1. 对示例embedded_c进行make时,访问头文件中结构体失败
    在这里插入图片描述

这里就是前面环境配置时说会碰到的问题之一,由于我一开始安装openssl使用的时apt进行的在线安装,安装的是最新的版本1.1.1,查看1.1.1中的头文件dh.h中发现已经没有了这一系列的结构体的定义,应该是新版本进行了函数,结构体的更新,这是很明显的版本不兼容问题,所以前面我建议直接安装openssl-1.0.2

civetweb学习_第11张图片

  1. 上一个问题解决后,新问题又来了——典型的配置大杂烩之头文件缺失
    civetweb学习_第12张图片

这类问题是最好解决的了,缺啥补啥
sudo search krb5 sudo apt-get install libkrb5-dev
第一个命令为查找库中是否还存在这个数据包,输出的显示中有
civetweb学习_第13张图片

则执行安装命令

这里我安装过程中也碰到了奇奇怪怪的问题,现在也没弄懂,我之前更换了清华源,然后这里安装就一直报错,更换回原来的源之后就没问题了,懂得大佬告知我一下,谢谢
civetweb学习_第14张图片
civetweb学习_第15张图片

他提示的两个方法我也用过,也解决不了才更换回原来的源(上面的截图都是已经更换后的截图)

更换源的操作可以参考 ubuntu更换清华源
civetweb学习_第16张图片

  1. openssl版本冲突问题
    civetweb学习_第17张图片

这是因为之前我在线安装了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

最后编译的输出结果如下,可以对照着源码进行参考分析,今天学的就到这了,之后再把分析的笔记添上来
civetweb学习_第18张图片
生活不止眼前的苟且,它一样没有诗和远方
civetweb学习_第19张图片
-------------------------------简单学习后,自己写了个小测试------------------------------------------
然后问题又出现了,就很烦
civetweb学习_第20张图片
这次的问题仍然跟这个openssl有关
civetweb学习_第21张图片
发生这个错误的原因就是因为openssl-1.1.1版本中很多函数已更新,而我使用的civetweb是旧一版本的,所以出现了未定义引用的错误
解决方法:目前还没整,早知如今,当初就不该想着用新的openssl

你可能感兴趣的:(Linux,计算机网络通识,嵌入式,c++,嵌入式)