Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions .cursorrules
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# 项目经验教训和规则

## C语言项目编译问题修复经验

### 问题:全局变量在头文件中的多重定义错误
- **错误症状**: `multiple definition of 'shutdown_server'` 链接错误
- **原因**: 在头文件(.h)中直接定义了全局变量,导致每个包含该头文件的源文件都创建了一个该变量的定义
- **解决方案**:
1. 在头文件中使用`extern`关键字声明变量:`extern void (*shutdown_server)(void);`
2. 在具体的.c文件中提供实际定义:`void (*shutdown_server)(void);`
- **日期**: 完成于本次修复会话
- **适用场景**: 所有C/C++项目中的全局变量声明和定义

### CppUTest框架使用经验
- 项目使用CppUTest框架进行单元测试
- 构建系统通过MakefileWorker.mk管理测试编译
- 测试自动在编译成功后运行
- 当前测试状态:50个测试,47个运行成功,3个忽略

### 项目构建流程
1. 首先需要确保cpputest库已构建(检查cpputest/lib/目录)
2. 清理旧的编译文件:`make clean`
3. 重新编译:`make`
4. 测试会在编译成功后自动运行

### 下次遇到类似问题的处理步骤
1. 识别链接器错误类型(多重定义 vs 未定义引用)
2. 对于多重定义:检查头文件中是否有不当的全局变量定义
3. 对于未定义引用:检查是否缺少实现或库依赖
4. 修复后重新清理并编译测试
2 changes: 1 addition & 1 deletion cpputest
Submodule cpputest updated 468 files
2 changes: 2 additions & 0 deletions src/html_ui/html_game.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
#include "agent.h"
#include "ui_agent.h"

void (*shutdown_server)(void);

static int ui_adaptor_pool_add_ui_adaptor(agent_t * ui);
static agent_t * ui_adaptor_pool_get_ui_adaptor_by_id(int id);
static void ui_adaptor_pool_remove(int id);
Expand Down
2 changes: 1 addition & 1 deletion src/html_ui/html_game.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
#define HTML_GAME_H_

int execute_game_command(const char * command, const char *parameters, char * buffer, int buffer_size);
void (*shutdown_server)(void);
extern void (*shutdown_server)(void);

#endif /* HTML_GAME_H_ */