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

到此,所需环境完成!

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

在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。   可从http://sourceforge.net/project/showfiles.php?group_id=7586下载安装boost库。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。里面有许多具有工业强度的库,如graph库。   Boost中比较有名气的有这么几个库:   Regex   正则表达式库   Spirit   LL parser framework,用C++代码直接表达EBNF   Graph   图组件和算法   Lambda   在调用的地方定义短小匿名的函数对象,很实用的functional功能   concept check   检查泛型编程中的concept   Mpl   用模板实现的元编程框架   Thread   可移植的C++多线程库   Python   把C++类和函数映射到Python之中   Pool   内存池管理   smart_ptr   5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:   Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。中文版见笔者在《Dr.Dobb's Journal软件研发杂志》第7辑上的译文。   Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的强调,是编写平台无关,现代C++的开发者必备的工具。但是Boost中也有很多是实验性质的东西,在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精巧的手法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。   boost英文解释:推进   boost 在一些播放软件和音效中指增强,比如Bass Boost,低音增强。 提示: 这是boostpro定制安装更新版, 可以选择自己需要的库. 包括1.33到1.40所有版本. 如要最新可去http://www.boostpro.com/
安装 MySQL 源码可以分为以下几个步骤: 1. 下载 MySQL 源码包:可以从 MySQL 官网下载最新的 MySQL 源码包,也可以从镜像站点下载。这里以 MySQL 8.0.20 版本的源码包为例,下载地址为:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.20.tar.gz 2. 解压源码包:使用以下命令解压源码包: ``` tar -zxvf mysql-boost-8.0.20.tar.gz ``` 3. 安装依赖库:在编译安装 MySQL 前需要安装一些依赖库,以 CentOS 7 为例,可以使用以下命令安装: ``` yum install -y cmake make gcc gcc-c++ bison ncurses-devel zlib-devel openssl-devel ``` 4. 创建 MySQL 用户和用户组:使用以下命令创建 MySQL 用户和用户组: ``` groupadd mysql useradd -r -g mysql -s /bin/false mysql ``` 5. 编译安装 MySQL:使用以下命令编译和安装 MySQL: ``` cd mysql-boost-8.0.20 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost \ -DWITH_SSL=system -DWITH_INNODB_MEMCACHE=ON \ -DWITH_INNOBASE_STORAGE_ENGINE=ON \ -DWITH_MYISAM_STORAGE_ENGINE=ON \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_DEBUG=0 make -j4 make install ``` 注意:上述命令中需要根据自己的实际情况修改安装路径和 Boost 库路径。 6. 配置 MySQL:使用以下命令配置 MySQL: ``` cd /usr/local/mysql cp support-files/my-default.cnf /etc/my.cnf bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data ``` 注意:上述命令中需要根据自己的实际情况修改 MySQL 的安装路径和数据存储路径。 7. 启动 MySQL:使用以下命令启动 MySQL: ``` bin/mysqld_safe --user=mysql & ``` 注意:上述命令中需要根据自己的实际情况修改 MySQL 的安装路径和用户。 8. 修改 MySQL 密码:使用以下命令修改 MySQL root 用户的密码: ``` bin/mysqladmin -u root password 'new-password' ``` 注意:上述命令中需要将 'new-password' 替换为自己的密码。 9. 连接 MySQL:使用以下命令连接 MySQL: ``` bin/mysql -u root -p ``` 注意:上述命令中需要输入 MySQL root 用户的密码。 至此,MySQL 源码安装完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

submarineas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值