1、配置编译机
在Mac和Windows上,交叉编译linux版本的服务程序也是可以的,不过一般公司会配置专门的编译机,代码提交到git(或svn)库里,由编译机pull并编译。
开发和正式编译的环境应尽量隔离,可以避免因开发漏提交,或配置不同导致的项目编译异常。一份合格的代码,在每个编译环境下,产出的程序都应该是一致的。
随着流程的标准化,公司基本都会推进自动化编译 流程,将开发人员和编译环境进一步解耦,只需在网页上操作,即可进行编译和导出。
接下来,我们在Rocky上搭建编译环境。
首先,通过ssh登陆到Rocky服务器上。
1.1 更新系统
首先更新系统,保证系统内补丁包处于最新状态
Copy sudo dnf update
sudo dnf clean all
Copy 上次元数据过期检查: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”包是否适用于当前系统。
查看输出
Copy 可用环境组:
服务器
最小安装
工作站
定制操作系统
虚拟化主机
已安装的环境组:
带 GUI 的服务器
已安装组:
容器管理
无头系统管理
可用组:
传统 UNIX 兼容性
控制台互联网工具
开发工具
.NET Development
图形管理工具
网络服务器
RPM 开发工具
科学记数法支持
安全性工具
智能卡支持
系统工具
在可用组中包含开发工具,可以继续安装
Copy sudo dnf groupinstall "Development Tools"
控制台展示所有需要安装的工具列表及依赖关系
Copy 安装组:
Development Tools
事务概要
================================================================================
安装 105 软件包
总下载:154 M
安装大小:566 M
确定吗?[y/N]:
安装完成后,通过以下命令查看已安装的组件
Copy 组:开发工具
描述:基本开发环境。
必要的软件包:
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版本信息
Copy 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位置
Copy $ 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并没有被默认安装,通过以下命令实现
Copy sudo dnf install cmake
安装完成后,查看版本信息
Copy $ cmake --version
cmake version 3.20.2
2、更新代码编译
在安装Development Tools时,已经安装了git,我们可以查看git版本
Copy $ git --version
git version 2.31.1
通过git将代码pull到本地,我们将代码放到目录 /data/code
跳转到data目录,创建code文件夹
Copy $cd /data
$sudo mkdir code
$ls
code service
使用git clone 命令将代码更新到本地
Copy [code]$ ls
chatservice simpleservice
进入到simpleservice/build 目录下,执行"cmake ..",因为CMakeLists文件与build目录同层,因此返回上层查找,而生成的临时文件都放在build目录下。
然后执行make命令,生成libServiceBase.a文件。
进入chatservice目录,创建lib和build目录,拷贝libServiceBase.a文件到lib目录下
Copy [chatservice]# cp ../lib/libServiceBase.a lib/
与simpleservice相同,进入build目录,执行"cmake ..",然后执行make命令。
在bin目录下生成ChatService程序。
将程序从服务器拷贝到本地,新开一个终端,执行scp命令
Copy scp root@192.168.0.120:/data/code/chatservice/bin/ChatService /users/用户名/
至此,linux版本的chatservice编译完成。