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

如何解决Xilinx-GCC编译C内嵌汇编的符号重复定义错误

解决Xilinx-GCC编译内嵌NEON汇编的符号重复定义错误

编译内嵌NEON汇编代码时出现以下错误:

{standard input}:634: Error: symbol NEONCopyPLD' is already defined {standard input}:678: Error: symbol NEONCopyPLD' is already defined

问题原因

代码里的NEONCopyPLD:是全局汇编标签,GNU汇编中不带.前缀的标签默认会被导出为全局符号。如果这段内嵌汇编所在的函数被多次实例化(比如开启函数内联、被多个调用点触发编译),就会生成多个同名全局符号,导致链接阶段冲突。而且从代码逻辑看,这个标签完全没有被任何指令引用,属于冗余定义。

解决办法

直接删除冗余的NEONCopyPLD:标签即可,修改后的代码如下:

asm volatile (
    "sub %[dst], %[dst], #64 \n"
    "1: \n"
    "ldnp q0, q1, [%[src]] \n"
    "ldnp q2, q3, [%[src], #32] \n"
    "add %[dst], %[dst], #64 \n"
    "subs %[sz], %[sz], #64 \n"
    "add %[src], %[src], #64 \n"
    "stnp q0, q1, [%[dst]] \n"
    "stnp q2, q3, [%[dst], #32] \n"
    "b.gt 1b \n"
    : [dst]"+r"(dst), [src]"+r"(src), [sz]"+r"(sz) 
    : 
    : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "cc", "memory");

额外说明

如果后续需要保留类似标签(且会被引用),要将其改为局部符号,即在标签前加.前缀,比如.NEONCopyPLD:。局部符号不会被导出为全局符号,也就不会出现重复定义的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 16:06:27