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

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐