symbol "_addr_0x9a91" redefined: first defined in "./sub_3EC74F.obj"; redefined in "./sub_Slave_Status_Judge_3EC800.obj"
时间: 2023-07-21 12:53:41 浏览: 144
这个错误提示是因为在两个不同的目标文件(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.如果你使用的是汇编语言,可能是因为你在多个汇编文件中定义了同一个符号。在这种情况下,你需要确保每个符号只在一个文件中定义。
总之,你需要找到所有重复定义同一个符号的地方,并将它们合并成一个定义,以解决这个问题。
在目标文件(object file)中声明名为 "_addr_0x9a91" 的符号(symbol)
在目标文件中声明符号的方法主要有两种,一种是定义全局变量,另一种是使用特殊的关键字来声明符号。
1. 定义全局变量
在一个文件中定义一个全局变量,其他文件可以通过 extern 关键字来引用该变量。例如:
```c
// 在 sub_3EC74F.c 文件中定义全局变量
int _addr_0x9a91;
// 在 sub_Slave_Status_Judge.c 文件中引用全局变量
extern int _addr_0x9a91;
```
这样,在链接时,链接器会将两个文件中的 _addr_0x9a91 符号合并为一个,避免符号冲突的问题。
2. 使用特殊的关键字
在一些编译器中,可以使用特殊的关键字来声明符号,例如 __declspec(dllexport) 和 __declspec(dllimport) 。例如:
```c
// 在 sub_3EC74F.c 文件中声明 _addr_0x9a91 符号
__declspec(dllexport) int _addr_0x9a91;
// 在 sub_Slave_Status_Judge.c 文件中引用 _addr_0x9a91 符号
__declspec(dllimport) int _addr_0x9a91;
```
这样,在链接时,链接器会将这两个文件中的 _addr_0x9a91 符号合并为一个。注意,这种方法只适用于特定的编译器和操作系统。
阅读全文