glog 使用: 00-源码编译

编译glog需要各种工具都配套,目前工作环境是:

  • centos7.9 :是挺老,但是吧,是目前的工作环境的操作系统,是目标环境
  • gcc 6.1.0 : 支持到 c11 和 c++14 ,是目前的工作环境的编译器版本
  • glog 0.6.0 : 2022年4月发布的,根据readme里的描述,这个版本使用的C++98标准编写,0.7以上已经使用C++14标准。 (尝试编译了下最新的0.7.1 版本编译器报错,需要gcc 7.4 以上,我这里gcc版本不能动所以,选择了0.6.0版本)
  • cmake 3.23 :glog编译要用到它。2022年11月发布的,与上面的glog相匹配。太新的版本会在glog 的 cmake build 时各种报错。(试过3.31及以后的4.1.1 都报错:提示 3.5以前的兼容性已被抛弃)

gcc 6.1.0

准备

安装系统默认的gcc 用于编译 gcc 6.1.0 的代码

$ yum install -y gcc gcc-c++ glibc-headers make wget
#装不上,就查下repo,配置为aliyun的

编译

下载gcc 6.1.0的源码:

$ cd /root/
#下载gcc 6.1.0的源码
$ wget http://mirrors.concertpass.com/gcc/releases/gcc-6.1.0/gcc-6.1.0.tar.gz
$ tar -xzvf gcc-6.1.0.tar.gz
#先装这个download_prerequisites报错无法解压bz2文件
$ yum -y install bzip2

$ cd gcc-6.1.0/
#就是个shell 里面下载了几个文件解压放到源码目录,是基础的几个数学库
$ ./contrib/download_prerequisites

#另外建一个build目录,用来构建的代码
$ cd ../
$ mkdir gcc-6.1.0_build
$ cd gcc-6.1.0_build
$ ../gcc-6.1.0/configure --prefix=/root/gcc-6.1.0_build --enable-checking=release --enable-languages=c,c++ --disable-multilib
$ make -j$(nproc)
$ make install

这里编译的时候,我想到了个有趣的问题,我现在用4.8.5的gcc来编译6.1.0的gcc,觉得很有趣。鸡和蛋的问题又来了。
目前的理解是:(有可能是错的,或者说太浅显,目前没有打算深究)
第一个能够编译的原因,我浅浅的了解到是说,因为gcc本身的代码编写使用的是c98等老的语言标准,所以老的4.8.5可以编译6.1.0版本的gcc。
背后的根本原因是,我所担心的4.8.5对新的编程语言版本的问题,其实是gcc本身的功能 和 构成gcc自身的编写语言,是两个事情。所以这两个看似矛盾的问题,其实是分离的。所以,用老的语言标准实现新的编译器程序。就可以让老的编译器4.8.5,去编译构建新的编译器6.1.0。

遇到的问题小计:

#安装下这个
$ yum -y install bzip2
#不装上面的东西,会在 ./contrib/download_prerequisites 时,报错下载 bz2 类型 文件,无法解压,脚本退出

多版本gcc管理

网上有个scl的方法,还需要把repo相关好好配置下,安装上后,通过devtoolset 进行版本切换,挺方便的,但是最低支持是到 gcc7.x的版本,没有更低的6,好像还是需要折腾下对应的scl repo。没折腾出来,遂放弃。
而且 scl也放弃维护了好像,没找到说具体有什么东西来替代。下面这个update-alternatives 我觉得还算挺方便的,应该就是用这个替代的?

#前面安装了4.8.5,需要重命名 /usr/bin/gcc 和 g++ 
#不做这个直接 update-alternatives --install 设置会无效
$ cd /usr/bin
$ mv gcc gcc-4
$ mv g++ g++-4

#注册(也就是install)对应的多个版本
#update-alternatives --install <link-path> <name> <file-path> <优先级> --slave <link-path> <name> <file-path>
#--slave 后面是相当于联动,后面切换gcc,g++版本也会跟着变
$ update-alternatives --install /usr/bin/gcc gcc /root/gcc-6.1.0_build/bin/gcc 61 --slave /usr/bin/g++ g++ /root/gcc-6.1.0_build/bin/g++
$ update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4

#输入对应的数字,选择切换的版本 +号对应的是当前的版本
$ update-alternatives --config gcc

There are 2 programs which provide 'gcc'.

  Selection    Command
-----------------------------------------------
*+ 1           /root/gcc-6.1.0_build/bin/gcc
   2           /usr/bin/gcc-4

Enter to keep the current selection[+], or type selection number:1

#查看对应的版本
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/root/gcc-6.1.0_build/libexec/gcc/x86_64-pc-linux-gnu/6.1.0/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: ../gcc-6.1.0/configure --prefix=/root/gcc-6.1.0_build --enable-checking=release --enable-languages=c,c++ --disable-multilib
Thread model: posix
gcc version 6.1.0 (GCC)

update-alternatives 可以理解为一个基于软连接实现的中转工具。类似接线员一样的方式,将各种文件通过软链接的方式进行版本切换。

无意间了解到 /usr/bin 下的这四个文件

cc : cc 是 gcc 的一个软链接
gcc: c 语言编译器
g++: c++ 语言编译器
c++: c++ 语言编译器
diff c++ 和 g++ 没有发现区别 其实两者是一个东西,ubuntu 下就是一个软连接 简介指向了g++
甚至 ubuntu下就是直接用的 update-alternatives 进行管理的。

cmake 3.23

安装

wget https://cmake.org/files/v3.23/cmake-3.23.0-linux-x86_64.sh
$ chmod +x cmake-3.23.0-linux-x86_64.sh

#两个 y 同意即可,会在同级目录下下载解压一个 “cmake-3.23.0-linux-x86_64” 目录
$ ./cmake-3.23.0-linux-x86_64.sh

#加到path路径下
$ echo 'export PATH="/your/path/to/cmake-3.23.0-linux-x86_64/bin:$PATH"' >> ~/.bashrc
$ source ~/.bashrc

#检查安装
$ cmake -version
cmake version 3.23.0

CMake suite maintained and supported by Kitware (kitware.com/cmake).

其它版本可以在这个版本页面上,按照相同的步骤进行安装:
https://cmake.org/files/

glog 0.6.0

# 下载源码
wget https://github.com/google/glog/archive/refs/tags/v0.6.0.tar.gz
# 解压
tar -xvzf v0.6.0.tar.gz

编译

$ cd glog-0.6.0
#建立两个目录用来编译和安装
$ mkdir build install
#进行cmake生成makefile 
#不指定编译器路径的话,cmake还是会自动默认用4.8.5的gcc去编译,然后后面会编译出错,因为glog用到了一些较新的语言标准实现的。
$ cmake -S . -B build  -DCMAKE_INSTALL_PREFIX=./install -DCMAKE_C_COMPILER=/etc/alternatives/gcc -DCMAKE_CXX_COMPILER=/etc/alternatives/g++  -G "Unix Makefiles"
#开始build
$ cmake --build build
#install
$ cmake --build build --target install
#查看下 install目录
$ ls install/
include  lib64
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值