Yocto Kirkstone SDK中GCC插件无法解析json::integer_number符号
GCC插件在Yocto Kirkstone Aarch64 SDK中加载失败问题
场景
我拥有一个包含GCC 11.5的Yocto Kirkstone Aarch64 SDK,希望使用该SDK构建并启用GCC插件,但尝试使用时出现以下错误:
error: symbol lookup error: undefined symbol: _ZTVN4json14integer_numberE (fatal)
背景
该SDK与完整嵌入式Linux镜像一同生成,我可修改镜像,但希望无需修改构建层即可构建插件并用于SDK。该插件在我的主机系统(Ubuntu 22.04.5)的GCC 11.4和12.3环境下可正常编译及使用。
构建过程
涉及项目为externis,该项目原生不支持交叉编译的使用方式,我已本地修改以覆盖GCC插件头文件目录,构建命令如下:
cmake -DGCC_PLUGIN_INCLUDE=/opt/toolchains/kirkstone/aarch64/sysroots/x86_64-sdk-linux/usr/lib/aarch64-poky-linux/gcc/aarch64-poky-linux/11.5.0/plugin
注:使用主机系统编译器构建,未使用SDK工具链。插件可正常编译安装,但在SDK环境中通过-fplugin=externis激活时,cc1plus加载插件时出现符号解析失败。
排查进展
已验证符号存在于主机和SDK的cc1plus中,通过readelf可查看到对应符号:
$ readelf -aW /lib/gcc/x86_64-linux-gnu/12/cc1plus | grep _ZTVN4json14integer_numberE 13196: 0000000002345d70 48 OBJECT WEAK DEFAULT 18 _ZTVN4json14integer_numberE $ readelf -aW /opt/toolchains/kirkstone/aarch64/sysroots/x86_64-sdk-linux/usr/libexec/aarch64-poky-linux/gcc/aarch64-poky-linux/11.5.0/cc1plus | grep _ZTVN4json14integer_numberE 29612: 0000000001a97e18 48 OBJECT WEAK DEFAULT 17 _ZTVN4json14integer_numberE
使用LD_DEBUG=all排查发现,主机cc1plus可提供该符号,但SDK中的cc1plus无法提供,导致符号查找失败。
假设与诉求
可能原因包括:符号表不匹配(如符号版本问题)、Yocto构建GCC时的配置异常(虽已启用--enable-plugin并禁用剥离),或需使用SDK工具链构建插件。目前计划尝试将插件加入Yocto构建,但希望找到无需修改构建层的解决方案,或明确当前策略的问题所在。
内容的提问来源于stack exchange,提问作者Ipiano
相关产品推荐
相关产品推荐

