ubuntu20.04下,在c++中调用python代码时,编译遇到以下错误:

/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to ffi_type_uint32@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference toffi_type_sint32@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to ffi_type_float@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference toffi_type_pointer@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to ffi_type_uint64@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference toffi_type_void@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to ffi_type_double@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference toffi_type_sint64@LIBFFI_BASE_7.0’
/usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference to ffi_prep_cif@LIBFFI_BASE_7.0' /usr/bin/ld: /lib/x86_64-linux-gnu/libgobject-2.0.so.0: undefined reference toffi_call@LIBFFI_BASE_7.0’

根据这篇文章Conda虚拟环境下libp11-kit.so.0: undefined symbol: ffi_type_pointer…问题解决的操作,解决了编译问题。步骤如下:

  1. 找到所使用的python环境,进到它的lib下,比如我的是~/miniconda3/envs/py38/lib
  2. cd ~/miniconda3/envs/py38/lib
  3. 查看:ll | grep libffi
    在这里插入图片描述
  4. 备份:mv libffi.so.7 libffi.so.7-bak
  5. 重新链接:ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7
  6. 结果
    在这里插入图片描述

但我还遇到另一个大坑:运行时仍然报错!折腾了我好久,原来是c++的opnecv版本跟python的opencv-python不一致导致的,解决就是尽量让opencv版本和opencv-python版本保持一致

  1. /usr/local/bin/opencv_version

3.4.15

  1. python3 -c "import cv2; print(cv2.__version__)"

3.4.15

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐