symbol "_addr_0x9a91" redefined: first defined in "./sub_3EC74F.obj"; redefined in "./sub_Slave_Status_Judge_3EC800.obj"汇编语言中,如何并将它们合并成一个定义
时间: 2024-04-03 21:33:57 浏览: 179
在汇编语言中,可以使用 `global` 和 `extern` 语句来定义和引用符号。如果一个符号被定义了多次,可以使用 `global` 和 `extern` 语句来将它们合并成一个定义。
具体来说,可以在一个汇编文件中定义该符号,并使用 `global` 语句将其标记为全局符号。例如:
```
section .data
addr_0x9a91 dd 0
section .text
global _addr_0x9a91
; 这里编写代码
```
在另一个汇编文件中,可以使用 `extern` 语句引用该符号,并确保它被标记为全局符号。例如:
```
section .text
extern _addr_0x9a91
global _Slave_Status_Judge
_Slave_Status_Judge:
; 这里编写代码,可以使用 _addr_0x9a91 符号
```
这样,链接器就会将所有引用 `_addr_0x9a91` 的地方都链接到同一个定义,解决了符号重复定义的问题。
相关问题
symbol "_addr_0x9a91" redefined: first defined in "./sub_3EC74F.obj"; redefined in "./sub_Slave_Status_Judge_3EC800.obj"
这个错误提示是因为在两个不同的目标文件(object file)中都定义了名为 "_addr_0x9a91" 的符号(symbol),导致冲突。在链接(link)时,链接器(linker)无法确定应该使用哪个符号,因此报错。
解决这个问题的方法是,在两个目标文件中只保留一个符号的定义,或者将这个符号的定义改为不同的名字。你可以检查一下你的代码,看看是否有重复定义该符号的情况。
怎么解决symbol "_addr_0x9a91" redefined: first defined in "./sub_3EC74F.obj"; redefined in "./sub_Slave_Status_Judge_3EC800.obj"
这个错误通常是由于同一个符号(symbol)在多个目标文件中被重复定义而导致的。要解决这个问题,你需要找到这个符号在哪些文件中被定义了多次,并将它们合并成一个定义。具体来说,可以采取以下措施:
1.检查你的代码,看是否有重复定义同一个符号的情况。如果有,需要将它们合并成一个定义。
2.如果你使用的是库文件,则可能是因为同一个库文件被链接了多次。你可以检查你的链接器选项,确保每个库文件只被链接一次。
3.如果你使用的是汇编语言,可能是因为你在多个汇编文件中定义了同一个符号。在这种情况下,你需要确保每个符号只在一个文件中定义。
总之,你需要找到所有重复定义同一个符号的地方,并将它们合并成一个定义,以解决这个问题。
阅读全文