perry 跨平台编译二进制

作者: adm 分类: node 发布时间: 2025-04-22

perry 跨平台编译如果本机编译很是麻烦,特别是mac电脑,下面分享从零开始构建一个包含 Perry 编译器的 Linux 环境。

整体步骤:


#1.先perry 打基础镜像
docker build --platform linux/amd64 -f perry_base.Dockerfile -t perry-builder:latest .

#2.构建项目
docker build --platform linux/amd64 -t my-perry-app .

从 Docker 镜像中复制出来


# 创建一个临时容器(不运行)
docker create --name temp my-perry-app

# 从容器中复制二进制文件到本地
docker cp temp:/app/main ./my-app-linux-amd64

# 删除临时容器
docker rm temp

# 验证文件类型
file ./my-app-linux-amd64

# 查看文件类型
file ./my-app-linux-amd64

perry_base.Dockerfile

创建文件 Dockerfile: perry 目录非项目目录

# perry_base.Dockerfile - 完整版(包含标准库)
FROM --platform=linux/amd64 node:22

# 安装构建工具和 Rust
RUN apt-get update && apt-get install -y \
    curl \
    build-essential \
    pkg-config \
    git \
    cmake \
    && rm -rf /var/lib/apt/lists/*

# 安装 Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

# 安装 Perry
RUN npm install -g @perryts/perry

# 添加 Linux 目标
RUN rustup target add x86_64-unknown-linux-gnu

# 复制本地 Perry 源码
COPY ./perry /tmp/perry

# 构建完整的 runtime 和标准库
WORKDIR /tmp/perry
RUN cargo build --release -p perry-runtime --target x86_64-unknown-linux-gnu
RUN cargo build --release -p perry-stdlib --target x86_64-unknown-linux-gnu

# 设置环境变量
ENV PERRY_RUNTIME_DIR=/tmp/perry/target/x86_64-unknown-linux-gnu/release

# 验证所有库文件都存在
RUN perry --version && \
    ls -la $PERRY_RUNTIME_DIR/libperry_*.a && \
    echo "Runtime 和 Stdlib 都已构建"

WORKDIR /app

项目Docker

FROM perry-builder:latest AS builder

ENV PERRY_RUNTIME_DIR=/tmp/perry/target/x86_64-unknown-linux-gnu/release

COPY . .

RUN perry compile src/main.ts --target linux

# 运行镜像
FROM --platform=linux/amd64 alpine:latest

RUN apk add --no-cache libgcc libstdc++

WORKDIR /app

# 修正:直接从 /app 复制 main 文件,而不是 /app/build
COPY --from=builder /app/main ./

EXPOSE 3000
CMD ["./main"]

部署与运行


# 上传到服务器
scp ./my-app-linux-amd64 user@your-server:/opt/myapp/

# 在服务器上运行
ssh user@your-server
cd /opt/myapp
chmod +x my-app-linux-amd64
./my-app-linux-amd64

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!