首页 > 系统相关 >Centos7中配置c++开发环境

Centos7中配置c++开发环境

时间:2023-02-18 16:22:26浏览次数:39  
标签:bin RUN 配置 c++ Centos7 usr && local ssh

Centos7中配置c++开发环境

c++不像Java等语言是跨平台的,在Windows开发之后,在Linux直接部署就行了,而是需要在Linux中进行开发和调试,那怎么在Windows系统里面模拟一个Linux的环境呢,最方便的就是利用Docker了,可以提供一个干净稳定可以快速复制的开发环境,省得因为各种环境和依赖库版本不同而引起的各种问题了,真是Docker使用的一个非常好的场景啊,并且,部署验证阶段,分布式的集群,也可以使用Docker来模拟部署,Docker真是程序员的好帮手啊。

FROM centos:7

# 非常重要,第一时间设置时区
ENV TZ Asia/Shanghai
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone

# 使用中科大的镜像加速,并且添加官方外的第三方软件源,如ius和epel,里面可以直接安装高版本的git236和cmake3,可以节省大量的源码编译时间
RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \
        -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
        /etc/yum.repos.d/CentOS-Base.repo \
        && yum makecache \
        && yum install -y https://mirrors.ustc.edu.cn/ius/ius-release-el7.rpm \
    && sed -e 's|repo.ius.io|mirrors.ustc.edu.cn|g' /etc/yum.repos.d/ius.repo \
    && sed -e 's|mirrors.fedoraproject.org|mirrors.ustc.edu.cn|g' /etc/yum.repos.d/epel.repo \
    && sed -e 's|^mirrorlist=|#mirrorlist=|g' \
        -e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos|g' \
        /etc/yum.repos.d/CentOS-Base.repo \
    && yum makecache

# 添加 sshd 的功能,与IDE的集成基本上都是基于 ssh 和 sftp,所以,这个是基本的功能了,设置默认的密码root,后面也有免密登录的配置
RUN yum install -y openssh-server \
&& sed -e 's|^#PermitRootLogin yes|PermitRootLogin yes|' /etc/ssh/sshd_config \
&& ssh-keygen -A && echo "root:root" | chpasswd

# 添加 c++ 编译和开发相关的基础组件包
RUN yum install -y cmake3 make automake autoconf gcc gcc-c++ \
which file wget \
&& rm /anaconda-post.log \
&& ln -s /usr/bin/cmake3 /usr/bin/cmake \
&& ln -s /usr/bin/ctest3 /usr/bin/ctest \
&& ln -s /usr/bin/cpack3 /usr/bin/cpack \
&& ln -s /usr/bin/cctest3 /usr/bin/cctest

RUN yum install -y \
        doxygen valgrind cppcheck \
        git236 net-tools zlib-devel python python-devel

# 编译高版本的gdb8.2支持某些高版本的IDE
RUN yum install -y texinfo ncurses-devel expat expat-devel mpfr mpfr-devel \
libiptcdata libiptcdata-devel \
&& curl -o gdb-8.2.tar.xz https://mirrors.ustc.edu.cn/gnu/gdb/gdb-8.2.tar.xz \
&& tar -xf gdb-8.2.tar.xz && cd gdb-8.2 \
&& ./configure && make && make install \
&& cd .. && rm -rf gdb* \
&& ln -s /usr/local/bin/gdb /usr/bin/gdb

# 添加特殊的老版本兼容项目,这个其实可以通过GitHub下载,不用使用本地文件,但是GitHub下载比较慢,还是使用本地源码吧,其实编译一次之后,也可以把所有的include、lib进行打包,后面制作时只需要复制添加就可以了,可以节省大量的时间,这个编译是非常慢的。
ADD gtest-1.7.0.tar.gz /usr/local/src
RUN cd /usr/local/src/gtest-1.7.0 \
&& cmake . && make \
&& ln -rs /usr/local/src/gtest-1.7.0/include/gtest /usr/local/include \
&& ln -s /usr/local/src/gtest-1.7.0/*.a /usr/local/lib

ADD boost_1_66_0.tar.gz /usr/local/src
RUN cd /usr/local/src/boost_1_66_0 \
&& /bin/bash ./bootstrap.sh && ./b2 install

ADD protobuf-3.1.0.tar.gz /usr/local/src
#RUN cd /usr/local/src/protobuf-3.1.0/cmake \
#&& cmake . -Dprotobuf_BUILD_SHARED_LIBS=ON -Dprotobuf_BUILD_TESTS=OFF && make && make install
RUN cd /usr/local/src/protobuf-3.1.0 \
&& ./configure CFLAGS="-fPIC" CXXFLAGS="-fPIC" && make && make install

ADD rapidjson-1.1.0.tar.gz /usr/local/src
RUN cd /usr/local/src/rapidjson-1.1.0 \
&& cmake . && make && make install

# 添加vscode的服务端程序和插件,第一次制作时,应该是没有这个server的,如果容器的运行环境可以上网,那很方便,直接运行之后,vscode会自动从网上把server下载下来并安装好,里面的插件也可以从本地的vscode往服务器安装,但是里面的c/c++的组件windows版本和linux版本是不一样的,如果容器可以上网,那会自动下载linux的版本,如果不能上网,vscode仅仅把本地的windows版本上传到服务器,会运行不起来,就需要自己独立到插件市场下载对应的linux版本,然后,把下载的插件上传到容器里面,再通过vscode的界面选择容器里面的插件文件进行安装。其中,容器不能上网的情况下,server的下载是和vscode的客户端对应的,vscode客户端有一个版本号(help->About->commit),复制这个版本号,然后,从官网下载对应的server,再上传到容器中,官网地址,可以把其中的commit id改为自己的实际版本号:http://update.code.visualstudio.com/commit:e2816fe719a4026ffa1ee0189dc89bdfdbafb164/server-linux-x64/stable 或者使用国内镜像 https://vscode.cdn.azure.cn/stable/e2816fe719a4026ffa1ee0189dc89bdfdbafb164/vscode-server-linux-x64.tar.gz,插件可以从https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools进行下载。
ADD vscode-server.tar.gz /root

# ssh免密登录:将本地是id_rsa.pub内容拷贝到/root/.ssh/authorized_keys,这里的id_rsa.pub content替换为实际的内容,这里仅自己使用,先简单写死,其他人要用其实也可以通过输入密码root接入。当然,如果是制作公共的镜像,还有另外四种方法:1.制作一个启动start.sh,然后,通过bash脚本中通过自定义的环境变量ID_RSA_PUB把这个public key配置到authorized_keys文件中,本地的实际id_rsa.pub内容通过-e环境变量的方式提供,可以通过 `sudo docker run -d -e ID_RSA_PUB $(cat ~/.ssh/id_rsa.pub) --name test image:tag`的方式启动;2. 或者通过编写一个本地启动sh,在docker run之后,追加一个public key的写入: `sudo docker exec -it test /bin/bash -c "echo $(cat ~/.ssh/id_rsa.pub) > /root/.ssh/authorized_keys"`;3. 通过volume文件映射的方式进行挂载也可以`sudo docker run -d -v ~/.ssh/id_rsa.pub:/root/.ssh/authorized_keys:rw`; 4. 或者通过`sudo docker cp ~/.ssh/id_rsa.pub test:/root/.ssh/authorized_keys`。其中,文件挂载的方式感觉是最简单方便的,并且,外部的id_rsa.pub修改了,也会自动同步,当然,一般这个也不会随便变动。
RUN mkdir /root/.ssh && echo 'id_rsa.pub content' > /root/.ssh/authorized_keys

EXPOSE 22
#
#ENTRYPOINT ["/bin/bash"]
CMD ["/usr/sbin/sshd", "-D"]

标签:bin,RUN,配置,c++,Centos7,usr,&&,local,ssh
From: https://www.cnblogs.com/yangwen0228/p/17132921.html

相关文章

  • c++ 待自我实现的基础组件
    内存池ringbuffer定时器rbtree原子操作共享内存slab文件操作elf文件解析死锁检测内存泄漏网络框架,epoll异步请求,redis,sql连接池线程池,日志相关协议......
  • win系统下AndroidStudio环境配置
    一,配置java环境1.安装JDK,可以到官网进行下载:输入下载地址:SoftwareDownload|Oracle选择java,java(JDK)fordevelopse 选择JavaSE18.03版本下载bin安装文件......
  • PAT-basic-1015 德才论 java c++
    一、题目宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡取人之术,苟不得圣人,君子而......
  • vue2 - router 的基本使用,安装router,配置router,router 标签
    1.安装routernpminstallvue-router 2.定义router路由导航src/router/index.jsimportVuefrom"vue";importVueRouterfrom"vue-router";//引入组件import......
  • nginx(二) の 配置静态资源网站
    首先在开始配置前,要想明白,nginx配置静态资源服务时基本逻辑,其实就是要将路由地址与服务器中文件真实的存储地址进行映射。配置静态资源样例配置前,首先要将当前配置......
  • Python配置文件管理之ini和yaml文件读取
    1.引言当我们设计软件时,我们通常会花费大量精力来编写高质量的代码。但这往往还不够,一个好的软件还应该考虑其整个系统,如测试、部署、网络等。其中最重要的一个方面是配置......
  • Android Studio相关配置说明
    介绍:AndroidSdutio是谷歌推出的一个Android集成开发工具。现已将SDK(softwaredevelopmentkit)集成到 AndroidStudio中。可以直接集成安装。 PS:如果部分用户先......
  • VIM基础配置
    VIM基础配置参考资料VimrcConfigurationGuide-HowtoCustomizeYourVimCodeEditorwithMappings,Vimscript,StatusLine,andMorehttps://github.com/pres......
  • c++ 11 lamda 如何实现 linq 中 先 where 再 select 的功能
    面向AI编程,回答如下:在C++11中,可以使用lambda表达式和算法库中的std::copy_if和std::transform算法来实现LINQ中先where再select的功能。具体来说,可以先使用......
  • c++ 有类似 linq 的方便数据处理的技术吗?
    面向AI编程,回答如下:C++标准库中并没有像LINQ那样直接支持数据处理的语言集成查询技术,但是C++11标准引入了一些新的语言特性,例如lambda表达式和范围循环,可以使得数据处理更......