非root权限:源码安装gcc和cmake、openssl
一、安装cmake
1、下载cmake
下载地址:https://cmake.org/filestar -zxvf cmake-3.19.8.tar.gz cd cmake-3.19.8/ ./configure --prefix=$HOME/anyDirectory
没有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
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中,如果没做,可能会找不到刚安装的库。
结束。