Yocto 4.0.15中libftd2xx.so缺失GNU_HASH的LDflags问题求解
修复Yocto 4.0.15中libftd2xx.so缺失GNU_HASH的QA错误
核心问题分析
你遇到的错误是Yocto QA检查发现libftd2xx.so未生成GNU_HASH段,根源要么是编译时未正确传递链接器参数,要么是该库为预编译二进制文件(本身不含GNU_HASH)。之前尝试的方法未生效,大概率是参数传递不到位或跳过检查的范围不合理。
针对性修复方案
方案1:精准跳过单个文件的QA检查(最安全,不影响包内其他文件)
如果libftd2xx.so是从厂商获取的预编译二进制库(无法重新编译生成GNU_HASH),直接限定跳过该文件的ldflags检查即可,无需跳过整个包:
INSANE_SKIP:${PN}:libftd2xx.so = "ldflags"
该写法仅跳过qtporductest包内libftd2xx.so这一个文件的缺失GNU_HASH检查,包内其他文件的QA校验仍正常执行,不会波及其他配方。
方案2:确保编译时正确传递链接器参数(针对源码编译场景)
如果libftd2xx是从源码编译的,需保证链接器参数正确传入编译流程:
- 使用Yocto官方推荐的
TARGET_LDFLAGS设置链接器参数,而非直接修改LDFLAGS:TARGET_LDFLAGS += "-Wl,--hash-style=gnu" - 确保配方将参数传递给Makefile(若使用Makefile构建):
若为自定义EXTRA_OEMAKE += "LDFLAGS='${TARGET_LDFLAGS}'"do_compile任务,需手动将TARGET_LDFLAGS传入编译命令:
注:之前使用do_compile() { oe_runmake LDFLAGS="${TARGET_LDFLAGS}" }TARGET_CC_ARCH+=${LDFLAGS}是错误的,TARGET_CC_ARCH用于给gcc指定架构参数,与链接器无关,因此不会生效。
为什么之前的方法未生效?
- 直接添加
LDFLAGS+="-Wl,--hash-style=gnu":若配方编译脚本未读取该变量,参数无法传递到链接器 TARGET_CC_ARCH+=${LDFLAGS}:变量用途错误,该变量用于指定编译器架构,不负责传递链接器参数- 未限定文件的
INSANE_SKIP:跳过了整个包的检查,虽能消除错误但风险高,精准限定单个文件才是合理选择
内容的提问来源于stack exchange,提问作者jason yu
相关产品推荐
相关产品推荐

