linux下openssl、cmake与boost的更新总结

引言

OpenSSL是一个功能齐全的软件库,其中包含传输层安全( TLS ) 和安全套接字层( SSL ) 协议的开源实现,用于保护通过计算机网络传输的信息。而CMake是一个跨平台的编译(Build)工具,可以用简单的语句来描述所有平台的编译过程。

如果需要安装新版本的cmake在3.16以上的话,一般要对openssl进行升级,静态编译OpenSSL并作为CMake第三方库,如果有遇到如下错误:

collect2: error: ld returned 1 exit status
ld returned 1 exit status Utilities/cmcurl/CMakeFiles ...

那么就是我写本篇博文的目的与总结,有个项目需要高版本的boost和cmake,走过了一些坑,开篇博客记录一下。

openssl升级

一般更新openssl是因为宿主机的版本太老,对于新版本的cmake很难兼容,这里的低版本指在1.1.0以下的那些,比如我在某台服务器上输入openssl version,它的版本号为2016年的1.0.2:

# openssl version
OpenSSL 1.0.2g  1 Mar 2016

目前更新适配cmake的openssl,我根据网上教程一般为1.1.1k,虽然我在官网上好像看到了3,但是太新的也不一定好,所以下面还是以1.1.1k为基准:

# 下载openssl安装包解压
wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz
tar -xvf openssl-1.1.0k.tar.gz

# 编译安装
cd openssl-1.1.1k/
./config
make install

上面一般不会出现问题,主要问题在于编译完成后去启动或者查看版本号,这里要注意的是,最好不要直接remove openssl,因为如果上面的没有配置好,那么之后对于HTTPS网络的验证就会失败,所以可选用上面方式编译完成后,然后直接覆盖:

ln -s /usr/local/bin/openssl /usr/bin/openssl

ln -s /usr/local/include/openssl /usr/include/openssl

echo "/usr/lib" >> /etc/ld.so.conf.d/libc.conf

ldconfig

这里会有的错误为:

bin/openssl: relocation error: bin/openssl: symbol EVP_mdc2 version OPENSSL_1_1_0 not defined in file libcrypto.so.1.1 with link time reference

这是因为没有将/usr/lib加进libc.conf链接配置中,加一下就好了。以及如果有用anaconda环境的用户,上面替换了/usr/bin/openssl的,输入openssl version后,会报出xxxx/anaconda3/bin/openssl:没有该文件或者目录的情况,原因是系统查找openssl该关键字时,先找到了在系统环境变量下的anaconda3,但是anaconda还是用的原来旧的openssl,所以我们还需要对其进行替换:

ln -s /usr/bin/openssl /home/xxx/anaconda3/bin/openssl

之后再输入openssl version就能看到版本号了:

root@xx-PowerEdge-R740:/# openssl version
OpenSSL 1.1.1k  25 Mar 2021

到此,openssl算编译成功。

cmake升级

cmake与openssl一样,也需要进行升级,虽然在Ubuntu标准仓库里,是有cmake的源的,但是版本太老了,目前如果要新一点的cmake,都是基于源码编译,过程如下:

首先和openssl一样,先查看版本:

cmake -version
# cmake version 2.8.12.2

如果前面确定openssl没有问题,那么cmake基本不会有什么大问题,安装步骤如下:

# 卸载旧版本
apt remove cmake

# 安装新版本包并解压
wget http://www.cmake.org/files/v3.16/cmake-3.16.6.tar.gz
tar -xvf cmake-3.16.6.tar.gz

# 编译
sudo chmod -R 777 cmake-3.16.6
cd cmake-3.16.6/
apt-get install build-essential 
./bootstrap
make -j4
make install

当时我进行编译出问题在make这里,到50%的时候提示我文章最开头那个错,然后我发现是openssl版本跟不上,于是就对其进行了更新,更新完没问题后,这里重新进行构建编译就没问题了。这里bootstrap没有指定路径,所以默认会加载进系统变量里,如果指定了路径,还需要加个软链接,因为旧版本的随着remove已经删除。

若是bootstrap有遇到什么问题,可以输入./bootstrap --help,查看相关参数。

boost升级

Boost库是为C++语言标准库提供扩展的一些C++程序库的总称,由Boost社区组织开发、维护。Boost库可以与C++标准库完美共同工作,并且为其提供扩展功能。

这里基本参考了:Ubuntu - Boost 库编译安装

因为我装boost库只是为了起一个中间件,我最终需要编译lightgbm,而light需要用到boost,就和openssl与cmake一样,所以很早之前听说过boost库很大,很强,但我用不到,这里也是以boost 1.68.0为例:

# 下载并解压
wget -O https://dl.bintray.com/boostorg/release/1.68.0/source/boost_1_68_0.tar.gz
tar xzvf boost_1_68_0.tar.gz
cd boost_1_68_0/

# 依赖项安装
sudo apt-get update  
sudo apt-get install build-essential \
                     g++ \
                     autotools-dev \
                     libicu-dev \
                     libbz2-dev

# #卸载旧版本
# uninstall dpkg
sudo apt --purge remove libboost-dev
sudo apt --purge remove libboost-all-dev
sudo apt --purge autoremove libboost-all-dev
 
# to uninstall the version which we installed from source
sudo rm -rf /usr/lib/libboost_*
sudo rm -rf /usr/include/boost
 
./bootstrap.sh
./b2 --with-python include="/usr/local/include/python3.7m/" 
sudo ./b2 install -j4 
 
# Add the Boost libraries path to the default Ubuntu library search path
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/boost.conf'
 
sudo  ldconfig
 
#查看 boost 版本信息
cat /usr/local/include/boost/version.hpp | grep "BOOST_LIB_VERSION"
#输出如:
#  //  BOOST_LIB_VERSION must be defined to be the same as BOOST_VERSION
#  define BOOST_LIB_VERSION "1_68"

到此,即安装完成,然后将其加载入环境变量:

"""
添加环境变量
"""
sudo vim /etc/profile
#添加如下内容:
#  CPLUS_INCLUDE_PATH=/usr/local/include
#  LIBRARY_PATH=/usr/local/lib
source /etc/profile

"""
建立软连接
"""
cd /usr/local/lib  
sudo ln -s libboost_python-py37.so libboost_python3.so  
sudo ln -s libboost_python-py37.a libboost_python3.a  
 
# 建立到 /usr/lib/x86_64-linux-gnu 路径的软连接
sudo cp /usr/local/lib/libboost_python37.a  /usr/lib/x86_64-linux-gnu/libboost_python-py37.a
sudo cp /usr/local/lib/libboost_python37.so.1.68.0  /usr/lib/x86_64-linux-gnu/libboost-py37.so

到此,所需环境完成!

下图为依赖上述环境的编译截图:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/submarineas/article/details/122373989