conda pip build报错

问题

pip install stpipeline
# 报错:
      gcc -pthread -shared -B /root/miniconda3/envs/stpipeline/compiler_compat -L/root/miniconda3/envs/stpipeline/lib -Wl,-rpath=/root/miniconda3/envs/stpipeline/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.7/taggd/core/demultiplex_core_functions.o -o build/lib.linux-x86_64-3.7/taggd/core/demultiplex_core_functions.cpython-37m-x86_64-linux-gnu.so
      /root/miniconda3/envs/stpipeline/compiler_compat/ld: cannot find /lib64/libpthread.so.0: No such file or directory
      /root/miniconda3/envs/stpipeline/compiler_compat/ld: cannot find /usr/lib64/libpthread_nonshared.a: No such file or directory
      collect2: error: ld returned 1 exit status
      error: command 'gcc' failed with exit status 1

分析

pip build所使用的ld似乎默认会从/lib64 和/usr/lib64中寻找依赖库,但是conda环境中的对应目录位于${CONDA_PREFIX}/x86_64-conda-linux-gnu/sysroot/下,因此可以在conda加载环境时使用脚本生成软链,并在退出环境时将对应的软链删掉。

解决方案

cd $CONDA_PREFIX
mkdir -p ./etc/conda/activate.d
mkdir -p ./etc/conda/deactivate.d
touch ./etc/conda/activate.d/create_soft_link.sh
touch ./etc/conda/deactivate.d/delete_soft_link.sh

修改./etc/conda/activate.d/create_soft_link.sh 内容:

#!/bin/sh

for libfile in ${CONDA_PREFIX}/x86_64-conda-linux-gnu/sysroot/usr/lib64/lib*
do
	filename=$(basename ${libfile})
	ln -s $libfile /usr/lib64/${filename}
done

修改./etc/conda/deactivate.d/delete_soft_link.sh 内容:

#!/bin/sh

for link in /usr/lib64/*; do
    if [ -L ${link} ]; then
        target=$(readlink -f ${link})
        if [[ ${target} == ${CONDA_PREFIX}/x86_64-conda-linux-gnu/sysroot/* ]]; then
            rm -f ${link}
        fi
    fi
done
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值