openmp library安装_无管理员权限下的软件安装 【gcc + shapeit4安装】

在没有管理员权限的情况下,文章详细描述了如何安装更新GCC到5.0.0以上版本,以及解决shapeit4安装中的依赖和编译问题。首先尝试使用conda安装shapeit4失败,然后遵循教程在个人目录下安装GCC,过程中涉及多个库的安装。在安装shapeit4时,遇到函数重载模糊和错误,通过修改源文件并手动添加链接参数解决。最后成功编译链接并强调理解编译链接和库原理的重要性。
摘要由CSDN通过智能技术生成

最近有一些果蝇SNP数据,要根据SNP数据来推测单倍体型(也就是phasing),通过检索文献,发现shapeit4应该是一个可以尝试的工具。

shapeit4的安装说明:

https://odelaneau.github.io/shapeit4/

其源代码:

https://github.com/odelaneau/shapeit4

这是我见过的安装最复杂的生信软件了,首先要确定gcc软件版本(<5.0.0的版本会提示错误),还要找到各种编译库,然后还要修改makefile文件。

【提示:下文代码块可以左右滑动】

尝试使用conda安装

在conda中安装软件会方便很多,根据之前的经验,首先想到的是通过conda安装,还真找到了通过conda安装shapeit4的途径。

但是,失败了!面对这些版本问题和依赖关系,conda似乎也无能为力,尤其是在处理一些底层依赖关系的时候。

conda install -c bioconda shapeit4

# UnsatisfiableError: The following specifications were found to be incompatible with each other:

# Output in format: Requested package -> Available versions

# Package libgcc-ng conflicts for:
# shapeit4 -> bzip2[version='>=1.0.8,<2.0a0'] -> libgcc-ng[version='>=4.9|>=9.3.0']
# shapeit4 -> libgcc-ng[version='>=7.3.0|>=7.5.0']

# Package _openmp_mutex conflicts for:
# python=3.9 -> libgcc-ng[version='>=7.3.0'] -> _openmp_mutex[version='>=4.5']
# shapeit4 -> libgcc-ng[version='>=7.5.0'] -> _openmp_mutex[version='>=4.5']

gcc版本更新

本服务器上的gcc版本是4.8.5,显然不符合shapeit4软件的要求。所以要更新gcc版本。

但是gcc这种比较底层软件的安装更新显然是需要系统权限。(通过conda似乎可以更新gcc版本,但是未在此路上继续往下走)。

所以怎样要没有管理员权限的情况下,建立属于自己的gcc软件呢?

结果还真在网上找到可行的方法:

http://cazencott.info/index.php/post/2016/03/14/Local-user-installation-of-gcc

下面就是非管理员权限下安装gcc的流程(本人验证)。

首先在自己的主目录下建立一些文件路径

export PREFIX = $HOME/.local
mkdir $PREFIX/build
mkdir $PREFIX/download

然后,安装GMP:(不要问我这些软件是干啥的,我也不知道,但是它应该是gcc运行需要的)

cd $PREFIX/download

wget https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
tar -xf gmp-6.2.1.tar.xz 
cd ../build
mkdir build-gmp
cd build-gmp
../../download/gmp-6.2.1/configure --disable-shared --enable-static --prefix=$PREFIX
make
make check
make install

再安装MPFR,

cd ../../download
wget https://www.mpfr.org/mpfr-current/mpfr-4.1.0.tar.gz
tar zxvf mpfr-4.1.0.tar.gz
cd ../build
mkdir build-mpfr
cd build-mpfr
../../download/mpfr-4.1.0/configure --with-gmp=$PREFIX --disable-shared --enable-static --prefix=$PREFIX/
make
make install

再安装MPC

cd ../../download
wget http://ftp.gnu.org/gnu/mpc/mpc-1.2.1.tar.gz
tar zxvf mpc-1.2.1.tar.gz
cd ../build
mkdir build-mpc
cd build-mpc
../../download/mpc-1.2.1/configure --with-gmp=$PREFIX --with-mpfr=$PREFIX --disable-shared --enable-static --prefix=$PREFIX
make                                                                                                                       
make install

再安装ISL

ISL
cd ../../download
wget http://isl.gforge.inria.fr/isl-0.14.tar.gz
tar zxvf isl-0.14.tar.gz
cd ../build
mkdir build-isl
cd build-isl/
../../download/isl-0.14/configure --with-gmp-prefix=$PREFIX --disable-shared --enable-static --prefix=$PREFIX
make
make install

在安装CLooG

cd ../../download
wget http://www.bastoul.net/cloog/pages/download/cloog-0.18.3.tar.gz
tar zxvf cloog-0.18.3.tar.gz
cd ../build
mkdir build-cloog
cd build-cloog/
../../download/cloog-0.18.3/configure --with-gmp-prefix=$PREFIX --with-isl-prefix=$PREFIX --disable-shared --enable-static --prefix=$PREFIX
make
make check
make install

上述依次安装了GMP ,MPFR, MPC, ISLCLooG,注意上述软件的最新版本未必能够顺利运行(最高版本未必是最合适的),上例中的版本是验证可行的。

下面我们就可以安装gcc了,这儿选择了7.4.0的软件版本。

同时去掉了--with-isl=$PREFIX 参数,因为发现带着它会出现错误,网上的一些资料也提示isl不是必须的。

 cd ../../download
 wget https://ftp.gnu.org/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.gz
 tar zxvf gcc-7.4.0.tar.gz
 cd gcc-7.4.0
 cd ../build
 mkdir build-gcc
 cd build-gcc
 export LD_LIBRARY_PATH=$PREFIX/lib
 export C_INCLUDE_PATH=$PREFIX/include
 export CPLUS_INCLUDE_PATH=$PREFIX/include
 ../../download/gcc-7.4.0/configure --with-gmp=$PREFIX --with-mpfr=$PREFIX --with-mpc=$PREFIX  --with-cloog=$PREFIX --disable-multilib --prefix=$PREFIX --enable-languages=c,c++ --with-pic
 # --with-isl=$PREFIX
 make
 make install

gcc的make过程需要好长时间,其中有提示warning的地方,但是还好没有error。最后终于完成安装。

$gcc --version
# gcc (GCC) 7.4.0
# Copyright (C) 2017 Free Software Foundation, Inc.
# This is free software; see the source for copying conditions.  There is NO
# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

在没有管理员权限的情况下,一些软件可以通过./configure --prefix=...来将软件安装在自己的目录下。

shapeit4的安装

更新完gcc的版本,可以继续安装shapeit4了。但是安装过程中依旧出现各种编译链接问题。

比如在编译haplotype_segment_single.cpphaplotype_segment_double.cpp的过程中总是提示函数重载模糊【isnan()isinf】错误。通过网上检索,只能修改一下源文件,在这两个函数的前面加上std::的标准库名得到解决。

终于把所有的源文件都编译完成了。

但是在最后连接的时候,又出现了错误,如下:

/localdisk/home/ywang120/.local/bin/htslib-1.9/libhts.a(hfile_libcurl.o): In function `easy_errno':
/localdisk/home/ywang120/.local/bin/htslib-1.9/hfile_libcurl.c:164: undefined reference to `curl_easy_getinfo'
/localdisk/home/ywang120/.local/bin/htslib-1.9/hfile_libcurl.c:178: undefined reference to `curl_easy_getinfo'
/localdisk/home/ywang120/.local/bin/htslib-1.9/libhts.a(hfile_libcurl.o): In function `wait_perform':
/localdisk/home/ywang120/.local/bin/htslib-1.9/hfile_libcurl.c:686: undefined reference to `curl_multi_fdset'
/localdisk/home/ywang120/.local/bin/htslib-1.9/hfile_libcurl.c:707: undefined reference to `curl_multi_perform'
...

本人一直误以为是libhts.a的静态库存在问题,换了好几个版本的htslib,依旧没有解决,甚至重装了这个库文件,还是提示错误。

不过仔细看看,好像错误的原因都指向了curl, 应该是说没有找到它对应的库。网上说,在链接的时候,可以-lcurl来链接到该库。

所以在链接的时候又添加了几个参数-lcurl -lssl -lcrypto,如下:

g++ -std=c++11 ....(一大堆.o文件) -o bin/shapeit4.2 -lz -lbz2 -lm -lpthread -llzma  -lcurl -lssl -lcrypto

(实际上,相当于把makefile给拆分开一步一步的编译链接)。

最后,终于在bin/下看到了编译链接好的shapeit4.2文件。

总结

conda可以很好的解决一些软件的安装和依赖关系,但是并不是所有的软件安装都能够通过conda解决。

在没有管理员权限的情况下,可以尝试通过./configure --prefix=来将软件安装在自己路径下。同时,本文也提供了没有管理员权限时gcc的安装/更新流程。

动态库、静态库、编译链接等等,让人看得云里雾里,本公众号之前有一篇很好的文章介绍了这方面的内容。了解了这些原理可以帮助我们解决软件安装过程中的问题。

f44daafa6ccd96faf8e34a114a6a64d5.png 编译过程、静态库和动态库  

【THE END】


参考资料:https://www.cprogramming.com/tutorial/shared-libraries-linux-gcc.html

http://cazencott.info/index.php/post/2016/03/14/Local-user-installation-of-gcc

5a970eb97d0f143f18263ec70a8812bd.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值