遇到undefined symbol: inflateInit2_s
今天用到一个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