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 toffi_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 toffi_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 toffi_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 toffi_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…问题解决的操作,解决了编译问题。步骤如下:
- 找到所使用的python环境,进到它的lib下,比如我的是
~/miniconda3/envs/py38/lib cd ~/miniconda3/envs/py38/lib- 查看:
ll | grep libffi

- 备份:
mv libffi.so.7 libffi.so.7-bak - 重新链接:
ln -s /lib/x86_64-linux-gnu/libffi.so.7.1.0 libffi.so.7 - 结果

但我还遇到另一个大坑:运行时仍然报错!折腾了我好久,原来是c++的opnecv版本跟python的opencv-python不一致导致的,解决就是尽量让opencv版本和opencv-python版本保持一致。
/usr/local/bin/opencv_version
3.4.15
python3 -c "import cv2; print(cv2.__version__)"
3.4.15
7810

被折叠的 条评论
为什么被折叠?



