# MoonLink 项目申报书

**项目名称**：MoonLink：ELF 目标文件符号解析与链接报告工具

**参赛者**：oilleelssq-wq

**联系邮箱**：2321130582@qq.com

**GitHub 仓库**：https://github.com/oilleelssq-wq/moonlink

**项目方向**：编译器与工具链基础设施；MoonBit 可复用库与命令行工具。

## 项目简介

MoonLink 读取多个 ELF64 `ET_REL` 目标文件，解析全局、弱、common、未定义和局部符号，报告重复强定义与未解析引用，并输出确定性的链接映射。它复用现有 `wuhaiting321/dwarfscope/src/elf` 做 ELF 解码，不重复实现通用 ELF 解析器；项目贡献集中在链接语义、冲突判定和可复现诊断。

## 可复现案例

1. 构建工具在调用系统链接器前检查多个目标文件，提前报告未定义符号和重复定义。
2. 编译器/教学项目用 MoonLink 观察强、弱、局部符号在跨对象解析中的差异，并定位到具体对象。
3. CI 对同一组对象重复生成链接映射，验证符号解析结果稳定、可复现。

## 核心功能

- ELF64 relocatable object 的链接输入归一化。
- 全局、弱、未定义、common 和局部符号解析。
- 强定义优先、弱定义回退、重复定义和未解析引用诊断。
- 带对象来源的确定性文本链接映射。
- 供 CI 和构建工具消费的稳定 JSON 报告。
- 可运行 CLI、测试、CI 和清晰的功能边界。

## 原创性与生态定位

项目是原创的链接诊断实现，不复制或移植任何现有项目。MoonCakes 已有 ELF 读取和二进制分析库，但没有以“跨对象符号解析与链接冲突诊断”为职责的独立工具；MoonLink 明确复用现有 ELF 解码包，避免和已有解析器重复，贡献集中在链接语义和报告层。依赖包为 Apache-2.0。

## 技术路线

先通过现有 ELF 包读取目标文件并归一化为链接输入；再按符号名扫描强/弱/未定义定义；最后生成稳定报告。所有阶段先写失败用例，再实现最小功能，保持 `moon check --deny-warn`、`moon test --deny-warn`、`moon fmt --check` 通过。

## 交付与验收

- 可复用的 MoonCakes 包和可运行的 `moonlink resolve` 命令行工具。
- README、API 示例、限制说明和变更日志。
- 覆盖强/弱/局部符号、重复定义、未解析引用和输入适配的测试。
- GitHub Actions 覆盖 wasm-gc 与 native 检查/测试。
- 当前版本交付符号解析与链接报告，不声称实现完整链接器。

