You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Yocto构建部分二进制MD5值随编译路径变化的问题排查求助

Yocto构建二进制MD5随编译路径变化的排查与解决需求

执行摘要:Yocto镜像构建的部分二进制文件(如canbus-handler)MD5值随编译路径变化,但极简项目(如helloyoctoworld)不受路径影响,经排查发现是nlohmann/json.hpp将自身头文件路径嵌入二进制导致。

问题背景

使用TI提供的Yocto平台构建产品镜像,已接入多个自有软件项目作为附加层,运行状态正常。近期发现部分辅助程序(如canbus-handler)在不同编译路径下生成的二进制MD5校验值存在差异。

对比测试结果

canbus-handler的MD5路径差异

在/tmp/Project-xxxxx_Yocto路径构建的结果:

user@MACHINE:/tmp/Project-xxxxx_Yocto$ md5sum ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/canbus-handler/git+AUTOINC+b99a8424b6-r0/packages-split/canbus-handler/usr/bin/canbus-handler
4f1b270a374c14bcd95d093095f4354d ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/canbus-handler/git+AUTOINC+b99a8424b6-r0/packages-split/canbus-handler/usr/bin/canbus-handler

在~/repos/Project-xxxxx_Yocto路径构建的结果:

user@MACHINE:~/repos/Project-xxxxx_Yocto$ md5sum ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/canbus-handler/git+AUTOINC+b99a8424b6-r0/packages-split/canbus-handler/usr/bin/canbus-handler
db35646094dc2f05022e012666973d7f ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/canbus-handler/git+AUTOINC+b99a8424b6-r0/packages-split/canbus-handler/usr/bin/canbus-handler

MD5值对比:4f1b270a374c14bcd95d093095f4354d vs db35646094dc2f05022e012666973d7f

极简项目helloyoctoworld的稳定MD5

在两个路径构建后,二进制MD5值始终一致:

user@MACHINE:/tmp/Project-xxxxx_Yocto$ md5sum ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/helloyoctoworld/git+AUTOINC+6716589062-r0/packages-split/helloyoctoworld/usr/bin/helloyoctoworld
40ae08fc09eb08ef8f519ee9312659c9  ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/helloyoctoworld/git+AUTOINC+6716589062-r0/packages-split/helloyoctoworld/usr/bin/helloyoctoworld
user@MACHINE:~/repos/Project-xxxxx_Yocto$ md5sum ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/helloyoctoworld/git+AUTOINC+6716589062-r0/packages-split/helloyoctoworld/usr/bin/helloyoctoworld
40ae08fc09eb08ef8f519ee9312659c9  ./workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/helloyoctoworld/git+AUTOINC+6716589062-r0/packages-split/helloyoctoworld/usr/bin/helloyoctoworld

MD5值对比:40ae08fc09eb08ef8f519ee9312659c9 vs 40ae08fc09eb08ef8f519ee9312659c9

排查过程

编辑1:二进制内容差异分析

对两个路径生成的canbus-handler二进制执行strings+diff操作,发现差异来自nlohmann/json.hpp的路径:

< /tmp/Project-xxxxx_Yocto/workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/canbus-handler/git+AUTOINC+deffada7ed-r0/recipe-sysroot/usr/include/nlohmann/json.hpp
---
> /home/USER/repos/Project-xxxxx_Yocto/workdir/arago-tmp-default-glibc/work/armv7at2hf-neon-oe-linux-gnueabi/canbus-handler/git+AUTOINC+deffada7ed-r0/recipe-sysroot/usr/include/nlohmann/json.hpp

即使不通过Yocto,直接在主机用make命令本地编译,该路径也会被嵌入二进制:

cannot use operator[] with
/usr/include/nlohmann/json.hpp
m_object != nullptr

编辑2:独立项目验证

创建独立测试项目验证,编译后用strings检查二进制,确认头文件路径确实被嵌入:

janne@shell:/tmp$ git clone git@github.com:usvi/nlohmannjsontest.git
Cloning into 'nlohmannjsontest'...
remote: Enumerating objects: 18, done.
remote: Counting objects: 100% (18/18), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 18 (delta 2), reused 18 (delta 2), pack-reused 0 (from 0)
Receiving objects: 100% (18/18), 204.74 KiB | 605.00 KiB/s, done.
Resolving deltas: 100% (2/2), done.
janne@shell:/tmp$ cd nlohmannjsontest/
janne@shell:/tmp/nlohmannjsontest$ make
g++  -I inc -Wno-deprecated  -c -o main_3.11.3.o src/main_3.11.3.cpp
g++   main_3.11.3.o   -o main_3.11.3
g++  -I inc -Wno-deprecated  -c -o main_2.1.1.o src/main_2.1.1.cpp
g++   main_2.1.1.o   -o main_2.1.1
strip main_3.11.3
strip main_2.1.1
strings main_3.11.3 | grep "json.hpp"
inc/nlohmann3.11.3/json.hpp
strings main_2.1.1 | grep "json.hpp"
inc/nlohmann2.1.1/json.hpp

解决方法需求

已明确问题源于nlohmann/json.hpp将头文件路径嵌入二进制,现寻求具体解决方法,消除编译路径对二进制MD5值的影响。


内容的提问来源于stack exchange,提问作者Janne Paalijarvi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:54:56