详细信息: ncdump:symbol lookup error:libp11-kit.so.0: undefined symbol: ffi_type_pointer, version LIBFFI_BASE_7.0 大概是这样。
思路一:netcdf的问题
一开始认为netcdf库装的有问题,check nc-config --all 显示nc_libs 为空,遂check .bashrc中检查LD_LIBRARY_PATH。(一度将$lib 修改为绝对路径,证明无效)
思路二:回归错误信息
看到这篇文章,学习到了该问题可以使用ldd工具 检查文件加载的动态库位置http://t.csdnimg.cn/3j0x4http://t.csdnimg.cn/3j0x4
实践如下:
发现libffi.so.7 链接到了虚拟环境下的lib中(估计之前因为gcc版本问题,我修改过bashrc中的LD_LIBRARY_PATH #export LD_LIBRARY_PATH=/home/lenovo/anaconda3/envs/forgcc8/lib/:$LD_LIBRARY_PATH,现已注释掉了,但似乎还有些问题暂且不提)。
(这part谨慎尝试,没啥用)
打算将其重新链接回到/usr/lib/x86_64-linux-gnu/libffi.so.7。使用 patchelf如下(PS 修改原文件之前要备份啊,修改了后发现没备份 整个人都很方)
patchelf --set-rpath /usr/lib/x86_64-linux-gnu/libffi.so.7 /lib/x86_64-linux-gnu/libp11-kit.so.0
修改结果查看rpath (第一行表示 应该上一步修改成功了)
但重新ldd check,还是老样子链接到虚拟环境的库下面了 _(¦3」∠)_
解决问题
发现这个回答(虚拟环境下libffi.so.7错误链接到了libffi.so.8)http://t.csdnimg.cn/AGAiEhttp://t.csdnimg.cn/AGAiE
修改所指向的环境下libffi.so.7文件的目标文件
结束
尽管它还是指向虚拟环境下的libffi.so.7 (OMG 到底是为什么啊)
但是ncdump可以用了