一. 安装工具 - Docker

文章介绍了如何利用Docker简化C++应用的开发环境,通过创建Dockerfile安装必要的工具如GCC和Boost库。过程中遇到了如仓库无Release文件、找不到特定版本库等错误,并给出了相应的解决方案。最终验证了Docker镜像是否成功包含了Boost库。
摘要由CSDN通过智能技术生成

Web Servers and APIs using C++

视频链接:https://www.linkedin.com/learning/web-servers-and-apis-using-c-plus-plus/building-crow?autoplay=true

零. 介绍

1. 目标:

如何使用MongoDB作为数据库在C++中构建网站,??Render / railway作为云服务器部署到Internet。

2. 所需技能

  • c++中级知识
  • 熟悉使用Docker
  • 熟悉使用命令行bash

一. 安装工具

1. 安装Docker

 使用C++难点之一是习惯其构建链的复杂性,程序具有单独的生成和连接步骤,必须在dev、build和production machines中安装库,如果任何部分不同步,都会显示不知名错误消息。Docker可以解决这一问题,它可以创建一个image,其中包含需要正确安装的所有工具,并将该image用于dev和prod。
 安装Docker Desktop: Docker官网
 安装后遇到问题:需更新WSL。按提示安装最新版本运行即可。
 安装完成后,可以在桌面使用Docker Desktop,在终端使用Docker CLI。
 为了让git bash有多个Tab窗口,安装Hyper(详见专栏安装工具下的博文),在Hyper里使用命令docker version,显示docker的版本号,显示docker安装成功。

2. 安装c++编辑器

视频中用Atom,我用Vscode。

3. 创建Dockerfile

 在bash,切换到桌面(Desktop),使用以下命令创建Dockerfile:

mkdir cppweb
cd cppweb
mkdir cppbox
cd cppbox
code .

 在cppbox目录下新建Dockerfile,编辑,保存。详见cppweb\cppbox\Dockerfile
 Dockerfile 是创建docker image的blueprint。
 Dockerfile里面的每行命令都是:大写开头+ +执行命令;如果一行命令太长,可以用\结尾,下一行接着写。
 Dockerfile中用 # 注释,
其中出现错误:
只能注释一整行,eg:# 更新软件列表
如果在命令行后加#,注释不起作用,eg: RUN apt-get -qq update # 更新软件列表

gcc是C++编译器和一一系列工具;别用最新版的gcc,它可能和代码不兼容。
RUN apt-get -qq update: 更新可用安装包的列表,并不安装它们。
RUN apt-get -qq upgrade: 更新可更新的安装包
-qq:安静执行命令,对任何安装提示都回答"yes",不会打印任何东西;若需详细输出,可用"y"代替"qq"。
RUN apt-get -qq install cmake: cmake是一个开源跨平台build工具,可用来创建make文件,make文件用来编译和链接代码。
RUN apt-get -qq install libboost-all-dev:安装boost库,crow微框架依赖boost。

RUN apt-get -qq install build-essential libtcmalloc-minimal4 && \  
    ln -s /usr/lib/libtcmalloc-minimal.so4 /usr/lib/libtcmalloc-minimal.so`

: 安装build-essential kit和TCMalloc minimal库,前者给image添加重要的dev工具,后者用来分配和释放内存。
第1个Dockerfile创建完成。

4. 运行Dockerfile

(1) 运行命令

 在bash,使用命令cd cppbox切换到cppbox目录下,里面有1个Dockerfile,运行以下命令,它将从Dockerfile中创建一个image:

docker build -t cppbox .

-t: 标记选项,image标记为cppbox。

(2) 调试过程

error1: apt-get -qq update仓库没有release文件

* error:

ERROR [2/6] RUN apt-get -qq update
#0 7.914 W: The repository 'http://security.debian.org/debian-security stretch/updates Release' does not have a Release file.
#0 7.914 W: The repository 'http://deb.debian.org/debian stretch Release' does not have a Release file.
#0 7.914 W: The repository 'http://deb.debian.org/debian stretch-updates Release' does not have a Release file.   
#0 7.914 E: Failed to fetch http://security.debian.org/debian-security/dists/stretch/updates/main/binary-amd64/Packages  404  Not Found
#0 7.914 E: Failed to fetch http://deb.debian.org/debian/dists/stretch/main/binary-amd64/Packages  404  Not Found 
#0 7.914 E: Failed to fetch http://deb.debian.org/debian/dists/stretch-updates/main/binary-amd64/Packages  404  Not Found
#0 7.914 E: Some index files failed to download. They have been ignored, or old ones used instead.

* 解决办法:
把gcc版本从7.3.0改新一点:12.3

error2:安装libboost-all-dev

* error:

[5/6] RUN apt-get -qq install libboost-all-dev=1.62.0.1:
#0 1.455 E: Version '1.62.0.1' for 'libboost-all-dev' was not found

* 解决办法:
删除版本号,即RUN apt-get -qq install libboost-all-dev

  • 新的错误

* error:

Errors were encountered while processing:
#0 193.9 gfortran
#0 193.9 libcoarrays-dev:amd64
#0 193.9 libcoarrays-openmpi-dev:amd64
#0 193.9 E: Sub-process /usr/bin/dpkg returned an error code (1)

* 解决办法
使用--no-install-recommends,即RUN apt-get install -y libboost-all-dev --no-install-recommends

error3: Unable to locate package xxx

* error:

#0 1.145 E: Unable to locate package built-essential

* 解决办法:
built拼错,改正,RUN apt-get -qq install build-essential
 如果还是出错,断开VPN连接。
build image成功,最后四行显示:

exporting to image                                                                           3.9s 
 => => exporting layers                                                                      3.9s 
 => => writing image sha256:39d17a8f00093163866c75d7ea7d17bda4051819126934092198ca12a220d909 0.0s
 => => naming to docker.io/library/cppbox

(3) 查看libboost库是否安装成功

 为了确保image正确build,查看它是否包含boost库。用以下命令将在容器上使用bash:

docker run -ti cppbox:latest bash

在容器中,查看所有libboost库:

find /usr -name libboost*.*

若显示几十个boost库,则安装成功。
退出容器用exit命令。至此,image被build,且工作正常。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值