## 核心编译方案

### 方案 1：在目标系统上编译（推荐）

```bash

cd mengyamonitor-backend
# 禁用 CGO，静态链接
export CGO_ENABLED=0
go build -ldflags="-s -w" -o mengyamonitor-backend .

```

### 方案 2：使用静态链接编译

```bash
cd mengyamonitor-backend
# 禁用 CGO
export CGO_ENABLED=0
export GOOS=linux
export GOARCH=amd64
# 编译（静态链接，不依赖系统库）
go build -ldflags="-s -w" -o mengyamonitor-backend .
```

### 方案 3：使用 Docker 编译

```bash
# 使用 Debian 11 镜像编译
docker run --rm -v $(pwd):/app -w /app golang:1.21-bullseye sh -c "
    export CGO_ENABLED=0
    go build -ldflags='-s -w' -o mengyamonitor-backend .
"
# 或者使用多阶段构建
docker build -t mengyamonitor-backend -f Dockerfile.build .
```

## 跨平台编译

### Android平台编译

#### 方案A：编译为命令行可执行文件

适用于将Go程序作为后台服务或工具在Android上运行。

**编译命令：**

```bash
# 编译为ARM64架构（现代手机）
export CGO_ENABLED=0
GOOS=android GOARCH=arm64 go build -ldflags="-s -w" -o mengyamonitor-android-arm64 .
# 编译为ARMv7架构（32位，兼容旧设备）
export CGO_ENABLED=0
GOOS=android GOARCH=arm go build -ldflags="-s -w" -o mengyamonitor-android-arm .
```
#### 方案B：使用gomobile编译为SDK库

适用于将Go代码集成到现有的Android原生应用中。

**安装gomobile工具：**

```bash

go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init
```

**编译生成Android库：**

```bash
# 编译为.aar库文件
gomobile bind -target=android -o android.aar ./your/package/path

# 或编译为特定架构
gomobile bind -target=android/arm64 -o android-arm64.aar ./your/package/path
```

#### Android编译注意事项：
1. **纯Go项目**：建议设置 `CGO_ENABLED=0` 进行静态编译
2. **需要CGO**：如需调用C库，需配置Android NDK交叉编译环境
3. **权限要求**：Android应用可能需要相应权限才能执行本地二进制文件
### 其他常见平台

```bash
# macOS (Intel)
export CGO_ENABLED=0
GOOS=darwin GOARCH=amd64 go build -o mengyamonitor-darwin-amd64 .
# macOS (Apple Silicon)
export CGO_ENABLED=0
GOOS=darwin GOARCH=arm64 go build -o mengyamonitor-darwin-arm64 .
# Windows
export CGO_ENABLED=0
GOOS=windows GOARCH=amd64 go build -o mengyamonitor-windows-amd64.exe .
```
## 验证编译结果
编译完成后，检查二进制文件：
```bash
# 检查文件类型
file mengyamonitor-backend
# 检查依赖（如果是静态链接，应该显示 "not a dynamic executable"）
ldd mengyamonitor-backend
# 检查 GLIBC 依赖（应该没有或很少）
objdump -T mengyamonitor-backend | grep GLIBC
# 检查Android二进制文件
file mengyamonitor-android-arm64
```
## 编译参数说明

- `CGO_ENABLED=0`: 禁用 CGO，使用纯 Go 实现，不依赖系统 C 库
- `GOOS`: 目标操作系统（linux、darwin、windows、android等）
- `GOARCH`: 目标架构（amd64、arm、arm64等）
- `-ldflags="-s -w"`: 减小二进制文件大小
  - `-s`: 省略符号表和调试信息
  - `-w`: 省略 DWARF 符号表

## 注意事项

1. **CGO依赖**：禁用 CGO 后，某些需要 C 库的功能可能不可用，但本项目不依赖 CGO
2. **文件大小**：静态链接的二进制文件会稍大一些，但兼容性更好
3. **GLIBC版本**：如果必须使用 CGO，需要在目标系统上编译，或使用相同 GLIBC 版本的系统编译
4. **Android权限**：在Android设备上执行二进制文件可能需要root权限或适当的SELinux策略
5. **gomobile限制**：使用gomobile时，导出的Go函数需遵循特定命名和类型规则

