非root权限:源码安装gcc和cmake、openssl

一、安装cmake 

1、下载cmake

下载地址:https://cmake.org/files 
tar -zxvf cmake-3.19.8.tar.gz
cd cmake-3.19.8/
./configure --prefix=$HOME/anyDirectory
其中$HOME是指向你该用户的root路径
没有sudo权限,cannot find openssl; install cmake cannot find openssl, without sudo
(1)修改CMakeLists.txt,在其中添加set(CMAKE_USE_OPENSSL OFF),可以直接添加到文件首行, 这里具体位置应该没有要求。用于解决没有openssl的问题
(2)非root权限安装openssl

2、编译安装及设置环境变量

i、编译安装

make
make install

ii、设置环境变量

vim ~/.bashrc
export PATH="$HOME/anyDirectory/bin:$PATH"
source ~/.bashrc

iii、检查

cmake --version

3、configure出错

The C++ compiler does not support C++11 (e.g.  std::unique_ptr)

linux 操作系统下,当cmake源码所在位置为挂载盘(mount),且挂载盘位于不同的服务器,此时如果出现挂载盘服务器与当前服务器时间不同步,编译cmake源码则会报上述错误。
解决办法:将cmake源码放置在非挂载盘

二、安装gcc

目前,GCC可用于编译C/C、FORTRAN、JAVA、OBJC和ADA等语言的程序,并可根据需要选择支持安装的语言。
我安装的是另一个目录下,如果以后想卸载,直接删除那个目录就可以了。

1、下载安装包

gcc有三个依赖软件包:gmp、mpfr、mpc也需要安装。
gcc下载地址:http://ftp.gnu.org/gnu/gcc/
GMP下载地址:https://ftp.gnu.org/gnu/gmp/
mpfr下载地址:https://ftp.gnu.org/gnu/mpfr/
mpc下载地址:https://ftp.gnu.org/gnu/mpc/

【注意】:GCC 源码里自带脚本能够轻松下载依赖包,执行【./contrib/download_prerequisites
若是自动安装成功,会有以下输出:
【All prerequisites downloaded successfully.】

2、安装gmp、mpfr、mpc依赖包

i、安装GMP

tar -jxvf gmp-6.2.0.tar.bz2
cd gmp-6.2.0/
./configure --prefix=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0
make
make install
mpfr和mpc的安装过程也是一样的,但在安装过程中必须添加依赖关系

ii、安装mpfr

tar -zxvf mpfr-4.1.0.tar.gz
cd mpfr-4.1.0/
./configure --prefix=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0 \ 
--with-gmp=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0
make
make install

iii、安装mpc

tar -zxvf mpc-1.2.0.tar.gz
cd mpc-1.2.0/
./configure --prefix=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0 \ 
--with-gmp=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0 \ 
--with-mpfr=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0
make
make installs

iv、设置库路径

gcc=/BIGDATA2/nscc_sci_1/xujb/gcc
export LD_LIBRARY_PATH=${gcc}/lib:${gcc}/lib64:$LD_LIBRARY_PATH

【注意】:三个依赖包安装完成后设置LD_LIBRARY_PATH库路径很重要,如果不指定,gcc在make时会出奇奇怪怪的错误

3、安装gcc

 

./configure --prefix=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0 \ 
--with-gmp=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0 \ 
--with-mpfr=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0 \ 
--with-mpc=/BIGDATA2/nscc_sci_1/xujb/apps/gcc-11.2.0 \ 
--enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto \ 
--disable-multilib

 

记得加上后面三个依赖项,否则会出刚开始出现的错误的。然后安装
------------------make的时间比较长------------------

make
make install 
make distclean  // 清除

4、解决错误

错误1:找不到libmpfr.so.6(将上面依赖包的库路径设置后一般会解决掉)


https://altlinux.pkgs.org/p10/classic-x86_64/libmpfr6-4.1.0-alt1.x86_64.rpm.html 

 然后将这两个文件上传至/usr/lib下,再运行命令:mv  libmpfr.so.6.0.2  libmpfr.so.6 后,重新编译,程序便执行无误!

cp libmpfr.so.6.1.0 libmpfr.so.6 

错误2:error while loading shared libraries: /lib/libmpfr.so.6: file too short
解决办法:更改配置文件
一般安装目录在:/usr/local/lib
配置文件在:/etc/ld.so.conf文件中
将该目录加入到共享库的配置文件中
将动态库文件加入配置:执行vi /etc/ld.so.conf,在"include ld.so.conf.d/*.conf"下方增加"/usr/local/lib"。
保存后,在命令行终端执行:

/sbin/ldconfig -v
ldconfig

其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。

错误3:../.././libgfortran/kinds-override.h:40:5: 错误:#error "Where has __float128 gone?"

 解决办法:清空环境变量LD_LIBRARY_PATH,PATH,C_INCLUDE_PATH,CPATH,每个环境变量按需设置

仔细核对,避免icc和gcc的header,lib相互污染。

5、设置环境变量并检查gcc版本

i、添加环境变量

vim ~/.bashrc

gcc=/BIGDATA2/nscc_sci_1/xujb/gcc
export PATH=${gcc}/bin:$PATH
export LD_LIBRARY_PATH=${gcc}/lib:${gcc}/lib64:$LD_LIBRARY_PATH

source ~/.bashrc

ii、查看gcc版本,确定是否安装成功

gcc --version

三、降版本安装gcc

例如gcc-8.4.1编译安装gcc-4.8.4

详情查看下面两篇解决方法:

1、centos8 安装gcc4.8.5/g++4.8.5【实测经验】

2、2021-04-13 densepose配置中 gcc 4.9.2安装问题记录(二)

 

四、安装openssl

1、下载openssl

(1)查看openssl版本

openssl version

(2)下载相应版本openssl

下载地址:https://www.openssl.org/source/old/

2、解压安装并配置环境

// 解压安装
tar -zxvf openssl-1.1.1s.tar.gz
./config --prefix=/usr/local/openssl
./config -t
make & make install

// 配置环境
export OPENSSL_ROOT_DIR=/usr/local/openssl
//export OPENSSL_LIBRARIES=/usr/local/openssl/lib/

export PATH=/usr/local/openssl/bin:$PATH
//export LD_LIBRARY_PATH=/usr/local/openssl/lib:$LD_LIBRARY_PATH

3、测试验证

/usr/local/openssl/bin/openssl version

如果正确显示版本号,则安装成功。某些版本的操作系统会报下列错误
openssl: symbol lookup error: openssl: undefined symbol: EVP_mdc2, version OPENSSL_1_1_0

// 此时需要配置下系统库:
// echo “/usr/local/openssl/lib” >> /etc/ld.so.conf.d/libc.conf && ldconfig
// 最后将/usr/local/openssl/bin/openssl添加到系统路径
// ln -s /usr/local/openssl/bin/openssl /bin/openssl

4、切换openssl版本

// mv /usr/bin/openssl /usr/bin/openssl.bak
// mv /usr/include/openssl /usr/include/openssl.bak
// ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
// ln -s /usr/local/openssl/include/openssl /usr/include/openssl
// echo "/usr/local/openssl/lib" >> /etc/ld.so.conf  ldconfig -v
// ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
// ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

// 【注意】:不能直接删除软链接
// 如需使用新版本开发,则需替换原来的软链接指向,即替换原动态库,进行版本升级。
// 替换/lib(lib64)和/usr/lib(lib64)和/usr/local/lib(lib64)存在的相应动态库:
// ln -sf /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so
// ln -sf /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so

5、解决openssl报错

源码安装完OpenSSL后,打开一个新的窗口执行openssl version命令报错(一定要新开窗口执行openssl version)
(i)error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
(ii)error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory

 (1)方法一:
链接或拷贝/lib(lib64)和/usr/lib(lib64)和/usr/local/lib(lib64)存在的相应动态库

ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib/libssl.so.1.1
ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib/libcrypto.so.1.1

(2)方法二:
不指定安装目录,一般so会存放在/usr/local/lib这个目录底下,去这个目录底下找,果然发现自己所需要的.so文件

所以,在/etc/ld.so.conf中加入/usr/local/lib这一行,保存之后,再运行:/sbin/ldconfig -v更新一下配置即可。

/sbin/ldconfig -v
ldconfig

其作用是将文件/etc/ld.so.conf列出的路径下的库文件缓存到/etc/ld.so.cache以供使用,因此当安装完一些库文件,或者修改/etc/ld.so.conf增加了库的新搜索路径,需要运行一下ldconfig,使所有的库文件都被缓存到文件/etc/ld.so.cache中,如果没做,可能会找不到刚安装的库。  

 

 

 

 

 

结束。

 

posted @ 2022-06-20 16:34  惊小呆  阅读(1610)  评论(0)    收藏  举报