在目标文件(object file)中声明名为 "_addr_0x9a91" 的符号(symbol)
时间: 2024-04-03 08:34:18 浏览: 57
在目标文件中声明符号的方法主要有两种,一种是定义全局变量,另一种是使用特殊的关键字来声明符号。
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 符号合并为一个。注意,这种方法只适用于特定的编译器和操作系统。
相关问题
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)无法确定应该使用哪个符号,因此报错。
解决这个问题的方法是,在两个目标文件中只保留一个符号的定义,或者将这个符号的定义改为不同的名字。你可以检查一下你的代码,看看是否有重复定义该符号的情况。
阅读全文