ROS2交叉编译时找不到PythonLibs “Could not find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)“

ROS2交叉编译时找不到PythonLibs “Could not find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)”

问题原因

“Could not find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)”
这个问题之所以出现是因为没有在默认的路径下找到libpython3.6m.so
还有${TX2_ROOTFS}/usr/include/python3.6中包含Python.h头文件

为什么叫libpython3.6m.so而不是libpython.so,原因出在/usr/share/cmake-3.19/Modules/FindPythonLibs.cmake

find_library(PYTHON_LIBRARY
  NAMES
      python${_CURRENT_VERSION_NO_DOTS}
      python${_CURRENT_VERSION}mu
      python${_CURRENT_VERSION}m
      python${_CURRENT_VERSION}u
      python${_CURRENT_VERSION}
      NAMES_PER_DIR
      PATH_SUFFIXES python${_CURRENT_VERSION}/config
)

检查tx2的sysroot,发现在${TX2_SYSROOT}/usr/lib/aarch64-linux-gnu/中存在libpython3.6m.so.1以及libpython3.6m.so.1.0唯独没有libpython3.6m.so,而libpython3.6m.so却在${TX2_SYSROOT}/usr/lib/python3.6/config-3.6m-aarch64-linux-gnu

~/tx2-rootfs/usr/lib/python3.6/config-3.6m-aarch64-linux-gnu$ ls -la
lrwxrwxrwx  1 admin admin   42 Jul 17 12:50 libpython3.6.so -> ../../aarch64-linux-gnu/libpython3.6m.so.1
lrwxrwxrwx  1 admin admin   42 Jul 17 12:50 libpython3.6m.so -> ../../aarch64-linux-gnu/libpython3.6m.so.1

很明显cmake的find_library搜索路径中并不存在这么复杂的路径python3.6/config-3.6m-aarch64-linux-gnu
为了让cmake能找到libpython3.6m.so可以在${TX2_SYSROOT}/usr/lib/aarch64-linux-gnu/中创建一个libpython3.6m.so.1的符号链接libpython3.6m.so

解决办法

$ ln -s libpython3.6m.so.1 libpython3.6m.so
$ ls -la
lrwxrwxrwx  1 admin admin   42 Jul 17 12:50 libpython3.6.so -> aarch64-linux-gnu/libpython3.6m.so.1

此外如果你的${TX2_ROOTFS}/usr/include/python3.6不存在,或其中没有Python.h头文件,那么你还要从TX2中拷贝相应头文件和路径。

rsync -av nvidia@192.168.55.1:/usr/include/python3.6 ${TX2_ROOTFS}/usr/include

谢谢关注!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值