Yocto构建的SDK编译时CMake找不到已存在的artpkg.pc.in是什么原因
问题根因
主要有两种常见的触发原因:
- Yocto SDK的CMake工具链默认开启了交叉编译路径重定向规则,
find_path命令默认会自动在所有搜索路径前拼接CMAKE_SYSROOT前缀。你传入的HINTS路径/opt/3.2.5.2/sysroots/x86_64-sdk-linux/usr/lib/cmake本身已经包含了完整的sysroot路径,重定向后实际搜索路径会变成/opt/3.2.5.2/sysroots/x86_64-sdk-linux/opt/3.2.5.2/sysroots/x86_64-sdk-linux/usr/lib/cmake,该路径不存在所以查找失败。 - 你执行编译前没有正确加载SDK的环境配置脚本,使用了主机原生的CMake而非SDK内置的CMake,路径匹配规则不一致导致查找失败。
还有极低概率是文件名称带有隐藏特殊字符,可以执行ls -b /opt/3.2.5.2/sysroots/x86_64-sdk-linux/usr/lib/cmake | grep artpkg确认文件名是否完全匹配。
修复方案
- 每次编译前先加载SDK环境,脚本实际名称可查看/opt/3.2.5.2目录下的文件列表确认:
source /opt/3.2.5.2/environment-setup-<目标架构名>.sh
- 若加载环境后仍报错,修改
installationpaths.cmake中的find_path语句,添加NO_CMAKE_FIND_ROOT_PATH参数关闭路径重定向即可:
find_path(PKG_IN_FILE artpkg.pc.in HINTS ${CMAKE_MODULE_PATH} NO_CMAKE_FIND_ROOT_PATH)
另外注意你的代码中错误提示存在拼写错误:查找的是artpkg.pc.in,但FATAL_ERROR输出的是artpkg.pc.inc,不会影响查找逻辑,仅会误导问题排查,可以同步修正。
内容的提问来源于stack exchange,提问作者andre.hre
相关产品推荐
相关产品推荐

