持续打造:C++容器化编译环境
发布时间:2021-11-09 10:25:19 所属栏目:PHP教程 来源:互联网
导读:在当前的主流的持续集成与持续交付中,Java项目仍然是大多数实践中主要的构建语言,这篇文章以gcc的容器化构建环境为例,通过gcc下的HelloWorld示例项目来介绍一下如何使用容器方式进行c++语言项目的构建。 gcc官方镜像 在Docker Hub上提供的gcc Docker 官方
在当前的主流的持续集成与持续交付中,Java项目仍然是大多数实践中主要的构建语言,这篇文章以gcc的容器化构建环境为例,通过gcc下的HelloWorld示例项目来介绍一下如何使用容器方式进行c++语言项目的构建。 gcc官方镜像 在Docker Hub上提供的gcc Docker 官方镜像如下所示,通过在enable-languages的配置选项中设定c++,从而使gcc镜像也具有编译c++代码的能力。 在这里插入图片描述 使用docker pull命令获取当前最新版本的9.2.0版 [root@host132 ~]# docker pull gcc:9.2.0 9.2.0: Pulling from library/gcc 4a56a430b2ba: Pull complete 4b5cacb629f5: Pull complete 14408c8d4f9a: Pull complete ea67eaa7dd42: Pull complete 4d134ac3fe4b: Pull complete dbc65b875791: Pull complete 53308bd32679: Pull complete da5ff526afd1: Pull complete 7704e65e7dab: Pull complete Digest: sha256:c0f4919207ad6d73dad9f98e532f1cb224159e9c7d0a257665564526ae85bf7f Status: Downloaded newer image for gcc:9.2.0 [root@host132 ~]# docker images |grep gcc gcc 9.2.0 201020b8c956 13 hours ago 1.14GB [root@host132 ~]# gcc版本确认 使用g++ -v确认当前构建用的g++编译器的版本信息,具体执行示例如下所示 [root@host132 g++]# docker run --rm -it gcc:9.2.0 g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-linux-gnu/9.2.0/lto-wrapper Target: x86_64-linux-gnu Configured with: /usr/src/gcc/configure --build=x86_64-linux-gnu --disable-multilib --enable-languages=c,c++,fortran,go Thread model: posix gcc version 9.2.0 (GCC) [root@host132 g++]# 事前准备 准备如下编译用的c++demo代码 [root@host132 g++]# cat demo/src/main.c #include <iostream> using namespace std; int main() { cout << "Hello liumiaocn" << endl; return 0; } [root@host132 g++]# 使用g++构建&链接 c++语言编译也分为编译和链接两个阶段,这里为了简单演示,一步直接生成可执行文件。具体执行示例命令如下所示: [root@host132 g++]# docker run --rm -v $(pwd)/demo/src/:/demo/src -it gcc:9.2.0 g++ -o /demo/src/demo /demo/src/main.c [root@host132 g++]# 确认编译和链接所生成的结果文件: [root@host132 g++]# ls demo/src/demo demo/src/demo [root@host132 g++]# file demo/src/demo demo/src/demo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, not stripped [root@host132 g++]# 确认结果 由于生成的为可执行文件,可以通过容器的方式确认结果输出 [root@host132 g++]# docker run --rm -v $(pwd)/demo/src/:/demo/src -it gcc:9.2.0 /demo/src/demo Hello liumiaocn [root@host132 g++]# 由于这个示例非常简单,并没有相关的其他的依赖,只要是格式支持的环境下都可以进行结果的确认,比如宿主机器CentOS7.5上 [root@host132 g++]# ./demo/src/demo Hello liumiaocn [root@host132 g++]# 总结 本文只是一个极为简单的示例,不具有任何实际的意义,在稍微复杂一点的项目之中,更为重要的是依赖的管理,以及Makefile的实践的指导相结合才是C++语言的项目在持续集成中需要重点注意的内容。 (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |