解决运行tfrecords的错误 arrow_cc.so: undefined symbol: inflateInit2_


今天用到一个python的包tfrecords,运行的时候遇到了错误

ImportError: /root/anaconda3/envs/ai/lib/python3.8/site-packages/tfrecords/lib/arrow_cc.so: undefined symbol: inflateInit2_

看情况是在我的环境中,arrow_cc.so 依赖于 zlib 库中的 inflateInit2_ 函数,但它可能加载了错误版本的 zlib。于是进行排查。

1.检查arrow_cc.so的动态链接

运行下面的命令,发现arrow_cc.so 动态链接的 libz.so 未正确加载

ldd /root/anaconda3/envs/ai/lib/python3.8/site-packages/tfrecords/lib/arrow_cc.so

#输出:
        linux-vdso.so.1 (0x00007ffe9697b000)
        libpython3.8.so.1.0 => /lib/libpython3.8.so.1.0 (0x00007768055e1000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007768053b5000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007768052ce000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007768052ae000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x0000776805086000)
        /lib64/ld-linux-x86-64.so.2 (0x00007768080ad000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x000077680507f000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x000077680507a000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x0000776805075000)

2.检查 zlib 是否正确安装

运行以下命令,检查系统是否安装了 libz.so

ls -l /lib/x86_64-linux-gnu/libz.so*

输出:
lrwxrwxrwx 1 root root     14 Jan  8 02:42 /lib/x86_64-linux-gnu/libz.so.1 -> libz.so.1.2.11
-rw-r--r-- 1 root root 108936 Jan  8 02:42 /lib/x86_64-linux-gnu/libz.so.1.2.11

3.链接到系统的 zlib

使用 LD_PRELOAD 强制加载系统的 libz.so,就可以运行了

export LD_PRELOAD=/lib/x86_64-linux-gnu/libz.so.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值