*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: TABLE1
时间: 2024-06-08 12:03:36 浏览: 180
引用中提到,*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS是因为出现了多个公共定义,即出现了多次定义同一个变量或函数的情况。因此,解决这个错误需要找出重复定义的变量或函数并将其去掉或修改。
引用中给出了一种解决方法,即如果需要在多个文件中使用同一个全局变量,应该将其在头文件中声明,在实现文件中定义,并且不在其他文件中声明和定义这个变量。
针对引用中的SYMBOL: TABLE1错误,可以通过检查代码中变量或函数的定义和声明,找出是否有出现重复定义的情况。如果需要更具体的解决方法,需要查看代码并进行分析。
相关问题
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: L
```shell
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: L?
```
这个错误是由于在程序中出现了重复的公共定义符号L?,这通常是由于在同一个工程中有两个文件都包含了相同的main函数导致的。解决方法是将同工程中的另一个程序全部注释掉,确保每个工程只有一个main函数。
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS SYMBOL: FUSHU
### 解决方案
错误 `ERROR L104: MULTIPLE PUBLIC DEFINITIONS` 表明在不同的模块中存在对同一个全局符号(如变量或函数)的多次定义。这种问题通常发生在多文件项目中,当某个符号被声明为外部可见并同时在多个 `.c` 文件中定义时。
以下是解决问题的具体分析:
#### 1. **理解 extern 的作用**
`extern` 关键字用于告诉编译器该符号将在其他地方定义,而不是在此处分配存储空间。如果未正确使用 `extern`,可能会导致重复定义的问题[^1]。
例如,在头文件中不应直接定义变量,而应仅声明它们为 `extern` 类型:
```c
// 正确的做法:在头文件中声明
#ifndef HEADER_H
#define HEADER_H
extern int BUSY;
#endif
```
而在其中一个 `.c` 文件中实际定义该变量:
```c
int BUSY;
```
这样可以避免多个 `.obj` 文件中都包含对该变量的定义。
---
#### 2. **检查头文件是否正确保护**
如果没有使用宏来防止头文件的重复包含,则可能导致同一符号被多次定义。通过添加条件编译指令可以有效避免此问题:
```c
#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H
// 声明部分放在这里
#endif
```
上述代码片段确保即使头文件被多次引入,其内容也只会被处理一次[^3]。
---
#### 3. **定位具体冲突符号**
根据错误提示 `SYMBOL: BUSY`, 可以确认是 `BUSY` 符号发生了重复定义。逐一检查所有涉及 `BUSY` 定义的地方,并按照前述方式调整为单一定义加 `extern` 声明的形式[^4]。
---
#### 4. **特殊情况——main 函数重定义**
如果错误涉及到 `MAIN` 符号,可能是因为工程中有多个 `.c` 文件各自包含了 `main()` 函数。Keil C51 编译器不允许在一个工程项目中存在多个入口点 `main()`。因此需要删除多余的 `main()` 实现或将不需要的部分注释掉[^5]。
---
#### 示例修正代码
假设当前问题是由于 `BUSY` 被重复定义引起,那么可以通过如下修改解决:
**header.h**
```c
#ifndef HEADER_H
#define HEADER_H
extern int BUSY; // 头文件中只声明不定义
#endif
```
**file1.c**
```c
#include "header.h"
int BUSY = 0; // 在一个 .c 文件中完成定义
```
**file2.c 和 file3.c**
只需包含头文件即可正常使用 `BUSY`,无需重新定义它:
```c
#include "header.h"
void someFunction() {
if (BUSY) {
// 执行某些操作
}
}
```
---
### 总结
通过对头文件的合理管理以及正确运用 `extern` 关键字,能够有效地消除因多重公共定义引发的链接错误。务必注意每个全局符号在整个项目的唯一性及其生命周期范围。
阅读全文
相关推荐
















