安装Perl编写的RAST程序时遇符号查找错误求助
问题:Perl编写的RAST程序安装失败,出现symbol lookup error
执行的安装命令
mkdir sas cp ~/Downloads/sas.tgz sas cd sas TOP=`pwd` tar -zxvf sas.tgz cd modules ./BUILD_MODULES export PERL5LIB=$PERL5LIB:$TOP/lib:$TOP/modules/lib export PATH=$PATH:$TOP/bin
错误信息
perl: symbol lookup error: /usr/local/share/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_xs_apiversion_bootcheck make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop. Build URI-1.53 perl: symbol lookup error: /usr/local/share/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_xs_apiversion_bootcheck make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop. Build HTML-Tagset-3.03 perl: symbol lookup error: /usr/local/share/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_xs_apiversion_bootcheck make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop. Build HTML-Parser-3.64 perl: symbol lookup error: /usr/local/share/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_xs_apiversion_bootcheck make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop. Build libwww-perl-5.834 perl: symbol lookup error: /usr/local/share/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_xs_apiversion_bootcheck make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop. Build Task-Weaken-1.02 perl: symbol lookup error: /usr/local/share/perl5/lib/perl5/x86_64-linux-thread-multi/auto/version/vxs/vxs.so: undefined symbol: Perl_xs_apiversion_bootcheck make: *** No targets specified and no makefile found. Stop. make: *** No rule to make target `install'. Stop.
系统环境信息
- 系统Perl版本:
perl 5, version 32, subversion 1 (v5.32.1) built for x86_64-linux-thread-multi - 尝试过conda环境的perl-5.34.0,错误相同
- 非系统管理员,无法删除/usr/local下的Perl模块
- PATH变量内容:
/opt/software/miniconda3/bin /opt/software/miniconda3/condabin /opt/CREST /usr/local/FastQC /usr/local/IGV /usr/local/IGVTools /usr/local/MUMmer /usr/local/TrimGalore-0.5.0 /usr/local/blast /usr/local/bowtie2 /usr/local/circos/bin /usr/local/fastx /usr/local/bin/gatk /usr/local/hisat2-2.1.0 /usr/local/mauve /usr/local/mauve/linux-x64 /usr/local/mothur /usr/local/mothur/blast/bin /usr/local/ngsplot/bin /usr/local/subread-1.6.3-Linux-x86_64/bin /opt/jdk1.8.0_171/bin /opt/jdk1.8.0_171/jre/bin
解决方案
1. 隔离系统冲突模块,使用本地安装路径
错误核心是系统/usr/local下的version模块与当前Perl版本不兼容,导致符号缺失。通过修改环境变量让Perl优先使用本地模块:
在执行./BUILD_MODULES前,先运行:
# 清空原有PERL5LIB,避免加载系统冲突模块 export PERL5LIB="$TOP/lib:$TOP/modules/lib" # 指定依赖模块安装到当前目录的local_perl文件夹 export PERL_MM_OPT="INSTALL_BASE=$TOP/local_perl" export PERL_MB_OPT="--install_base $TOP/local_perl" # 将本地模块路径加入优先搜索队列 export PERL5LIB="$TOP/local_perl/lib/perl5:$PERL5LIB"
再执行./BUILD_MODULES,所有依赖会安装到本地,不会调用系统中冲突的version模块。
2. 创建完全隔离的conda Perl环境
之前的conda环境可能继承了系统PERL5LIB,需创建纯净环境:
# 创建新conda环境,指定与系统接近的Perl版本 conda create -n rast_perl perl=5.32.1 -y # 激活环境 conda activate rast_perl # 重新执行安装步骤,清空PERL5LIB避免系统模块干扰 mkdir sas cp ~/Downloads/sas.tgz sas cd sas TOP=`pwd` tar -zxvf sas.tgz cd modules unset PERL5LIB ./BUILD_MODULES export PERL5LIB="$TOP/lib:$TOP/modules/lib:$CONDA_PREFIX/lib/perl5/site_perl/5.32.1/x86_64-linux-thread-multi" export PATH="$TOP/bin:$PATH"
3. 手动安装兼容的version模块
如果上述方法无效,手动在本地安装对应版本的version模块:
# 下载与Perl5.32兼容的version模块源码 wget https://cpan.metacpan.org/authors/id/J/JP/JPEACOCK/version-0.9924.tar.gz tar -zxvf version-0.9924.tar.gz cd version-0.9924 # 安装到本地目录 perl Makefile.PL INSTALL_BASE=$TOP/local_perl make make install # 加入环境变量 export PERL5LIB="$TOP/local_perl/lib/perl5:$PERL5LIB" # 回到modules目录重新执行安装 cd ../modules ./BUILD_MODULES
内容的提问来源于stack exchange,提问作者random
相关产品推荐
相关产品推荐

