C++服务开发入门指南
  • 序言
  • 前言
  • 一、一个简单的服务
    • 1 什么是服务
    • 2 服务可以用来做什么
    • 3 简单服务框架
  • 二、网络通信服务框架
    • 1 网络服务的基本概念
    • 2 增加监听端口
    • 3 处理客户端会话
    • 小结
  • 三、添加基础模块
    • 1 日志模块
    • 2 定时器
    • 3 事件机制
    • 4 线程池
    • 5 线程安全
    • 小结
  • 四、一个聊天服务
    • 1 需求描述及分析
    • 2 概要设计
    • 3 创建服务项目
    • 4 ClientUser实现
    • 5 RoomMgr实现
    • 6 ChatRoom实现
    • 7 RoomIDMgr实现
    • 小结
  • 五、测试、迭代及重构
    • 1 测试
    • 2 迭代
    • 3 重构
    • 4 版本号
  • 六、架构设计
    • 1 单点服务
    • 2 分布式服务
  • 七、部署及发布
    • 1 部署环境
    • 2 编译环境
    • 3 部署服务
    • 4 发布服务
  • 八、线上问题处理
    • 1 线上问题
    • 2 问题处理
  • 九、程序员的职业规划
    • 职业规划
Powered by GitBook
On this page
  • 1、配置编译机
  • 2、更新代码编译
  1. 七、部署及发布

2 编译环境

1、配置编译机

在Mac和Windows上,交叉编译linux版本的服务程序也是可以的,不过一般公司会配置专门的编译机,代码提交到git(或svn)库里,由编译机pull并编译。

开发和正式编译的环境应尽量隔离,可以避免因开发漏提交,或配置不同导致的项目编译异常。一份合格的代码,在每个编译环境下,产出的程序都应该是一致的。

随着流程的标准化,公司基本都会推进自动化编译流程,将开发人员和编译环境进一步解耦,只需在网页上操作,即可进行编译和导出。

接下来,我们在Rocky上搭建编译环境。

首先,通过ssh登陆到Rocky服务器上。

1.1 更新系统

首先更新系统,保证系统内补丁包处于最新状态

sudo dnf update
sudo dnf clean all

上次元数据过期检查:1:16:28 前,执行于 2023年01月11日 星期三 18时50分52秒。
依赖关系解决。
================================================================================
 软件包            架构   版本                                  仓库       大小
================================================================================
安装:
 kernel            x86_64 5.14.0-162.6.1.el9_1.0.1              baseos    1.8 M
升级:
 bpftool           x86_64 5.14.0-162.6.1.el9_1.0.1              baseos    2.6 M
 firefox           x86_64 102.6.0-1.el9_1                       appstream 106 M
 glx-utils         x86_64 8.4.0-12.20210504git0f9e7d9.el9.0.1   appstream  40 k
 kernel-tools      x86_64 5.14.0-162.6.1.el9_1.0.1              baseos    2.1 M
 kernel-tools-libs x86_64 5.14.0-162.6.1.el9_1.0.1              baseos    1.9 M
 krb5-libs         x86_64 1.19.1-24.el9_1                       baseos    718 k
 python3-perf      x86_64 5.14.0-162.6.1.el9_1.0.1              baseos    2.0 M
 rocky-gpg-keys    noarch 9.1-1.11.el9                          baseos     12 k
 rocky-release     noarch 9.1-1.11.el9                          baseos     22 k
 rocky-repos       noarch 9.1-1.11.el9                          baseos     12 k
 tzdata            noarch 2022g-1.el9_1                         baseos    427 k
安装依赖关系:
 kernel-core       x86_64 5.14.0-162.6.1.el9_1.0.1              baseos     45 M
 kernel-modules    x86_64 5.14.0-162.6.1.el9_1.0.1              baseos     33 M

事务概要
================================================================================
安装   3 软件包
升级  11 软件包

总下载:196 M
确定吗?[y/N]

根据提示,安装完毕!

1.2 安装GCC

Rocky Linux和许多其他基于RedHat的Linux发行版,都附带了一个名为“Development tools”(开发工具)的包,用于在Linux系统上构建和编译软件。此包包含GCC、g++、make、libtool、rpmbuild、Autoconf等。可以通过运行以下命令检查“Development tools”包是否适用于当前系统。

sudo dnf group list

查看输出

可用环境组:
   服务器
   最小安装
   工作站
   定制操作系统
   虚拟化主机
已安装的环境组:
   带 GUI 的服务器
已安装组:
   容器管理
   无头系统管理
可用组:
   传统 UNIX 兼容性
   控制台互联网工具
   开发工具
   .NET Development
   图形管理工具
   网络服务器
   RPM 开发工具
   科学记数法支持
   安全性工具
   智能卡支持
   系统工具

在可用组中包含开发工具,可以继续安装

sudo dnf groupinstall "Development Tools"

控制台展示所有需要安装的工具列表及依赖关系

安装组:
 Development Tools                                                             

事务概要
================================================================================
安装  105 软件包

总下载:154 M
安装大小:566 M
确定吗?[y/N]: 

安装完成后,通过以下命令查看已安装的组件

组:开发工具
 描述:基本开发环境。
 必要的软件包:
   autoconf
   automake
   binutils
   bison
   flex
   gcc
   gcc-c++
   gdb
   glibc-devel
   libtool
   make
   pkgconf
   pkgconf-m4
   pkgconf-pkg-config
   redhat-rpm-config
   rpm-build
   rpm-sign
   strace
 默认的软件包:
   asciidoc
   byacc
   diffstat
   git
   intltool
   jna
   ltrace
   patchutils
   perl-Fedora-VSP
   perl-generators
   pesign
   source-highlight
   systemtap
   valgrind
   valgrind-devel
 可选的软件包:
   cmake
   expect
   rpmdevtools
   rpmlint

查看gcc版本信息

gcc -v


使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/11/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
目标:x86_64-redhat-linux
配置为:../configure --enable-bootstrap --enable-host-pie --enable-host-bind-now --enable-languages=c,c++,fortran,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.rockylinux.org/ --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --without-isl --enable-offload-targets=nvptx-none --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_64=x86-64-v2 --with-arch_32=x86-64 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
线程模型:posix
Supported LTO compression algorithms: zlib zstd
gcc 版本 11.3.1 20220421 (Red Hat 11.3.1-2) (GCC) 

查看gcc位置

$ whereis gcc
gcc: /usr/bin/gcc /usr/lib/gcc /usr/libexec/gcc /usr/share/man/man1/gcc.1.gz /usr/share/info/gcc.info.gz

1.3 安装cmake

从上面的软件包中可以看到,cmake并没有被默认安装,通过以下命令实现

sudo dnf install cmake

安装完成后,查看版本信息

$ cmake --version
cmake version 3.20.2

2、更新代码编译

在安装Development Tools时,已经安装了git,我们可以查看git版本

$ git --version
git version 2.31.1

通过git将代码pull到本地,我们将代码放到目录 /data/code

跳转到data目录,创建code文件夹

$cd /data
$sudo mkdir code
$ls
code  service

使用git clone 命令将代码更新到本地

[code]$ ls
chatservice  simpleservice

进入到simpleservice/build 目录下,执行"cmake ..",因为CMakeLists文件与build目录同层,因此返回上层查找,而生成的临时文件都放在build目录下。

然后执行make命令,生成libServiceBase.a文件。

进入chatservice目录,创建lib和build目录,拷贝libServiceBase.a文件到lib目录下

[chatservice]# cp ../lib/libServiceBase.a lib/

与simpleservice相同,进入build目录,执行"cmake ..",然后执行make命令。

在bin目录下生成ChatService程序。

将程序从服务器拷贝到本地,新开一个终端,执行scp命令

scp root@192.168.0.120:/data/code/chatservice/bin/ChatService /users/用户名/

至此,linux版本的chatservice编译完成。

Previous1 部署环境Next3 部署服务

Last updated 2 years ago