高通8155平台YOCTO CMAKE 编译问题解决方法

CMake编译cmCTestResourceGroupsLexer失败:解决zstd库引用问题
作者分享了在使用高通8155平台和Yocto Linux环境下,遇到CMake编译cmCTestResourceGroupsLexer时的zstd库链接错误。通过分析源码和配置,发现CMAKE_USE_SYSTEM_ZSTD默认为OFF,导致编译失败。通过修改CMakeCache.txt设置--no-system-zstd,成功解决了编译问题。

硬件平台:高通8155

软件平台:yocoto linux + ubuntu16.04

最近开始接触8155平台,发现编译阶段出现cmake编译失败,网上搜了一下没有相关的解决方案,因此自己研究了下并记录一下,方便有需要的同行快速解决。

问题描述:

| [ 93%] Building CXX object Source/CMakeFiles/CTestLib.dir/LexerParser/cmCTestResourceGroupsLexer.cxx.o
| cd /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/build/Source && /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/hosttools/g++ -DLIBARCHIVE_STATIC -I/home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/build/Utilities -I/home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/build/Source -I/home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/cmake-3.19.5/Source -I/home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/cmake-3.19.5/Source/LexerParser -I/home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/cmake-3.19.5/Source/CTest -I/home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/cmake-3.19.5/Source/CPack -isystem /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/cmake-3.19.5/Utilities/std -isystem /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/cmake-3.19.5/Utilities -isystem/home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/recipe-sysroot-native/usr/include -O2 -pipe -O3 -DNDEBUG -std=c++14 -o CMakeFiles/CTestLib.dir/LexerParser/cmCTestResourceGroupsLexer.cxx.o -c /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/cmake-3.19.5/Source/LexerParser/cmCTestResourceGroupsLexer.cxx
| [ 93%] Linking CXX static library libCPackLib.a
| cd /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/build/Source && /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/build/Bootstrap.cmk/cmake -P CMakeFiles/CPackLib.dir/cmake_clean_target.cmake
| cd /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/build/Source && /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/work/x86_64-linux/cmake-native/3.19.5-r0/build/Bootstrap.cmk/cmake -E cmake_link_script CMakeFiles/CPackLib.dir/link.txt --verbose=1
| /home/CN/yongfeng.liu/SA8155_LV_1_0_v2/apps/apps_proc/poky/build/tmp-glibc/hosttools/ar qc libCPackLib.a CMakeFiles/CPackLib.dir/CPack/cmCPackArchiveGenerator.cxx.o CMakeFiles/CPackLib.dir/CPack/cmCPackComponentGroup.cxx.o CMakeFiles/CPackLib.dir/CPack/cmCPackDebGenerator.cxx.o CMakeFiles/CPackLib.dir/CPack/cmCPackExternalGenerator.cxx.o CMakeFiles/CPackLib.dir/CPack/cmCPackGeneratorFactory.cxx.o CMakeFiles/CPackLib.dir/CPack/cmCPackGenerator.cxx.o CMakeFiles/CPackLib.dir/CPack/cmCPackLog.cxx.o CMakeFiles/CPackLib.dir/CPack/cmCPackNSISGenerator.cxx.o CM
<think>好的,我现在需要帮用户解决关于Yocto项目与Little Kernel(LK)结合进行编译问题,或者解决相关的编译问题。首先,我需要回忆Yocto和LK的基本概念,以及它们结合使用时可能遇到的挑战。 Yocto项目是一个用于构建定制Linux系统的工具,它通过层(layers)来管理不同的配置和软件包。而Little Kernel(LK)是一个轻量级的实时操作系统内核,常用于嵌入式设备的引导程序,比如Android的bootloader。用户可能是在尝试将LK集成到Yocto构建的系统中,或者在编译过程中遇到了问题。 首先,我需要考虑如何在Yocto项目中添加对LK的支持。通常,Yocto使用bitbake作为构建工具,所以可能需要创建一个新的bitbake配方(recipe)来编译LK。这可能涉及编写一个.bb文件,指定源码的获取方式、依赖项、编译步骤和安装过程。例如,用户可能需要从LK的Git仓库获取源码,配置交叉编译工具链,然后进行编译。 接下来,可能的编译问题包括工具链不兼容、配置选项错误、依赖缺失等。例如,如果LK需要特定的ARM工具链,而Yocto项目中配置的工具链版本不符,就会导致编译失败。此时需要检查Yocto的conf文件,确保选择了正确的MACHINE配置和工具链。 另一个常见的问题是层依赖。用户可能需要添加特定的Yocto层,比如meta-arm,这些层可能已经包含了LK的配方或相关的支持。如果用户没有正确添加这些层,或者层的版本不兼容,也会导致编译错误。需要指导用户检查他们的bblayers.conf文件,确保所有必要的层都已包含。 此外,LK本身可能有特定的编译选项或补丁需要应用。例如,某些硬件平台需要特定的启动参数或驱动支持,用户可能需要修改LK的配置文件,或者在Yocto的配方中添加补丁。如果用户没有正确应用这些补丁,编译可能会失败。 调试方法方面,建议用户查看编译日志,通常位于tmp/work目录下的相关日志文件。通过分析错误信息,可以定位问题所在。例如,如果出现未定义的引用错误,可能是链接库缺失或编译标志不正确。 最后,参考用户提供的引用内容,虽然引用是关于LTTng和内核事件跟踪的,但可以推测用户可能在调试或性能分析时遇到问题,可能需要结合Yocto构建的工具链进行调试。因此,建议用户确保调试工具如gdb已正确集成到Yocto构建的系统中,并配置LK以支持必要的调试选项。 总结一下,解决步骤可能包括:创建或使用现有的LK配方,配置工具链和层依赖,处理特定硬件配置,应用必要的补丁,以及调试编译错误。需要将这些步骤详细分解,并提供具体的示例和命令,帮助用户逐步解决问题。</think>### Yocto项目与Little Kernel(LK)集成编译指南 #### 一、基础环境配置 1. **Yocto项目初始化** - 安装依赖包:`sudo apt-get install gawk git-core diffstat python3` - 下载Poky仓库: ```bash git clone git://git.yoctoproject.org/poky cd poky && git checkout kirkstone # 推荐使用稳定版本如kirkstone ``` - 添加`meta-arm`层支持ARM平台: ```bash git clone git://git.yoctoproject.org/meta-arm ``` 2. **LK源码集成** - 创建自定义层`meta-custom-lk`: ```bash bitbake-layers create-layer meta-custom-lk bitbake-layers add-layer meta-custom-lk ``` - 在`meta-custom-lk/recipes-bsp/lk`路径下创建配方文件`lk_git.bb`,示例内容: ```bitbake SUMMARY = "Little Kernel Bootloader" LICENSE = "BSD-3-Clause" LIC_FILES_CHKSUM = "file://LICENSE;md5=..." SRC_URI = "git://github.com/littlekernel/lk.git;protocol=https;branch=master" SRCREV = "d35c8a5d3c1d1d0c622b7d..." # 指定commit哈希 inherit deploy COMPATIBLE_MACHINE = "(your-machine-name)" # 如qemuarm64 do_compile() { oe_runmake ${LK_CONFIG} # 如make msm8996 } do_deploy() { install -d ${DEPLOYDIR} install -m 0644 ${B}/build-${LK_CONFIG}/lk.bin ${DEPLOYDIR} } ``` #### 二、典型编译问题解决 1. **工具链不兼容** - 现象:`undefined reference to __aeabi_uidiv` - 解决方法:在`local.conf`中强制指定ABI: ```bash TUNE_CCARGS .= " -mabi=aapcs-linux" ``` 2. **缺失LK依赖库** - 现象:`fatal error: libfdt.h: No such file or directory` - 解决方法:在配方中添加依赖: ```bitbake DEPENDS += "dtc-native" ``` 3. **部署路径错误** - 现象:`do_deploy任务找不到lk.bin` - 调试步骤: ```bash bitbake -c devshell lk # 进入编译目录手动验证输出文件路径 ``` #### 三、调试与验证 1. **查看详细编译日志** ```bash bitbake -D lk 2>&1 | tee build.log grep -rin "error:" build.log ``` 2. **QEMU启动验证** - 修改`local.conf`启用虚拟化: ```bash MACHINE = "qemuarm64" IMAGE_INSTALL:append = " kernel-image" ``` - 启动命令: ```bash runqemu nographic ```
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值