文章目录
- 写在前面
- 一、问题描述
- 二、解决方法
- 参考链接
写在前面
自己的测试环境:
Ubuntu20.04
ROS-Noetic
一、问题描述
运行 python 程序出现如下问题:
Traceback (most recent call last):File "<string>", line 1, in <module>File "/home/wong/ProgramFiles/anaconda3/envs/pytorch_env/lib/python3.8/site-packages/gi/__init__.py", line 40, in <module>from . import _gi
ImportError: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined symbol: ffi_type_uint32, version LIBFFI_BASE_7.0
二、解决方法
这个错误表明你在使用 gi
时遇到了 libgobject-2.0.so.0
库和 libffi
库之间的依赖问题,具体是缺少了 ffi_type_uint32
这个符号。通常这种问题是由于 libffi 库版本不匹配或者依赖库没有正确链接导致的.
运行以下命令:
ldconfig -p | grep libffi
输出类似于下述的结果:
可以看到这里有多个版本的 libffi.so
, 这导致在某些情况下,Python
可能会加载错误的 libffi
版本。你可以通过设置 LD_PRELOAD
来强制加载正确的 libffi
库。
运行以下命令,此命令会强制 python 加载你系统中的 libffi.so.7
版本:
LD_PRELOAD=/lib/x86_64-linux-gnu/libffi.so.7 python -c "import gi; print(gi.__version__)"
如果返回类似于版本号的输出,比如3.48.2
,说明Python
可能加载错误的 libffi
版本,导致的 undefined symbol: ffi_type_uint32
的问题。因此需要在 .bashrc
中增加下列指令:
export LD_PRELOAD=/lib/x86_64-linux-gnu/libffi.so.7
# 如果有多个 LD_PRELOAD 的变量,则把 libffi.so.7 放在前面,确保它首先加载 libffi.so.7,然后再加载其他的 libffi.
# export LD_PRELOAD=/lib/x86_64-linux-gnu/libffi.so.7:/usr/lib/x86_64-linux-gnu/libtiff.so.5
然后执行下列指令,使配置生效:
source ~/.bashrc
然后重新执行自己的python程序即可解决问题。
参考链接
[1] chat.