stagex/gccGCC Docker 镜像是包含 GNU Compiler Collection (GCC) 的容器化环境,提供跨平台的编译工具链。GCC 是一套支持多种编程语言的开源编译器集合,该镜像旨在简化编译环境配置,确保开发、测试和生产环境的一致性,避免系统级依赖冲突。
gcc、g++、gfortran、gnat 等)。libc、libstdc++)、链接器(ld)、汇编器(as)及调试工具(gdb)。gcc:13、gcc:12、gcc:latest),适配不同项目的编译器版本需求。apt/apk 安装额外依赖(如开发库、工具)。arm64v8/gcc),测试多平台兼容性。从 Docker Hub 拉取指定版本的 GCC 镜像(默认拉取 latest 标签,即最新稳定版):
bash# 拉取最新版 docker pull gcc # 拉取指定版本(如 GCC 13) docker pull gcc:13 # 拉取 Alpine 基础的轻量版(需注意部分功能可能受限) docker pull gcc:13-alpine
通过 docker run 启动容器,执行编译命令。核心是通过 -v 挂载宿主机源代码目录到容器内,并指定工作目录(-w)。
假设宿主机当前目录下有 main.c(源代码):
c// main.c #include <stdio.h> int main() { printf("Hello, GCC Docker!\n"); return 0; }
编译命令:
bashdocker run --rm \ -v $(pwd):/app \ # 挂载当前目录到容器内 /app -w /app \ # 设置工作目录为 /app gcc \ # 使用 GCC 镜像 gcc main.c -o main # 执行编译:将 main.c 编译为可执行文件 main
编译完成后,宿主机当前目录会生成 main 可执行文件。
类似地,编译 main.cpp:
cpp// main.cpp #include <iostream> int main() { std::cout << "Hello, G++ Docker!" << std::endl; return 0; }
编译命令(使用 g++):
bashdocker run --rm \ -v $(pwd):/app \ -w /app \ gcc \ g++ main.cpp -o main_cpp
若需编译多文件项目,将整个项目目录挂载到容器内,通过 -w 指定项目根目录:
bash# 假设项目目录为 ./my-project,包含多个 .c/.cpp 文件 docker run --rm \ -v $(pwd)/my-project:/app \ -w /app \ gcc \ make # 执行项目中的 Makefile
通过环境变量或直接传递参数,指定编译选项(如优化级别、警告选项、宏定义等)。
bash# 启用 O2 优化、Wall 警告,链接数学库(-lm) docker run --rm -v $(pwd):/app -w /app gcc \ gcc main.c -o main -O2 -Wall -lm
常用环境变量(容器内生效):
CC:指定 C 编译器路径(默认 gcc)。CXX:指定 C++ 编译器路径(默认 g++)。CFLAGS:C 编译选项(如 -O2 -Wall)。CXXFLAGS:C++ 编译选项。LDFLAGS:链接选项(如 -lm -lpthread)。示例:通过 CFLAGS 传递全局编译选项
bashdocker run --rm \ -v $(pwd):/app \ -w /app \ -e CFLAGS="-O3 -ffast-math" \ # 启用 O3 优化和快速数学计算 gcc \ gcc main.c -o main # 实际编译命令中无需重复指定 CFLAGS
若项目依赖系统库(如 libssl-dev、zlib1g-dev),可在容器启动时通过 apt(Debian 基础镜像)或 apk(Alpine 基础镜像)安装:
bash# Debian 基础镜像安装依赖(需 root 权限,默认已启用) docker run --rm -it \ -v $(pwd):/app \ -w /app \ gcc \ bash -c "apt update && apt install -y libssl-dev && gcc main.c -o main -lssl"
pthread 的多线程 C 程序源代码 thread.c:
c#include <stdio.h> #include <pthread.h> void* print(void* arg) { printf("Thread %d\n", *(int*)arg); return NULL; } int main() { pthread_t t1, t2; int a=1, b=2; pthread_create(&t1, NULL, print, &a); pthread_create(&t2, NULL, print, &b); pthread_join(t1, NULL); pthread_join(t2, NULL); return 0; }
编译命令(需链接 pthread 库):
bashdocker run --rm \ -v $(pwd):/app \ -w /app \ -e LDFLAGS="-lpthread" \ # 链接 pthread 库 gcc \ gcc thread.c -o thread $LDFLAGS # 使用环境变量中的链接选项
适用于需要固定配置的项目(如编译命令、挂载目录、环境变量固定),创建 docker-compose.yml:
yamlversion: '3' services: compiler: image: gcc:13 volumes: - ./src:/app # 宿主机源代码目录 ./src 挂载到容器 /app working_dir: /app environment: - CFLAGS="-O2 -Wall" # 全局 C 编译选项 - CXX=g++ # 指定 C++ 编译器 command: gcc main.c -o main # 默认编译命令(可通过 docker-compose run 覆盖)
使用方法:
bash# 启动并执行编译 docker-compose up # 如需执行其他命令(如 make),覆盖默认 command docker-compose run compiler make
| 标签格式 | 说明 | 示例 |
|---|---|---|
gcc:latest | 最新稳定版 GCC | docker pull gcc |
gcc:<version> | 指定 GCC 主版本(如 13、12) | gcc:13 |
gcc:<version>-alpine | 基于 Alpine 的轻量版(体积更小) | gcc:13-alpine |
gcc:<version>-slim | 基于 Debian Slim 的精简版 | gcc:13-slim |
| 环境变量 | 作用 | 默认值 |
|---|---|---|
CC | C 编译器路径 | /usr/bin/gcc |
CXX | C++ 编译器路径 | /usr/bin/g++ |
CFLAGS | C 编译选项(如 -O2 -I/include) | 空 |
CXXFLAGS | C++ 编译选项(如 -std=c++20 -Wall) | 空 |
LDFLAGS | 链接选项(如 -lm -L/lib) | 空 |
CPPFLAGS | 预处理器选项(如 -DDEBUG) | 空 |
root 用户,编译生成的文件可能会被赋予 root 权限,需通过 --user $(id -u):$(id -g) 调整用户权限(如 docker run --user $(id -u):$(id -g) ...)。alpine/slim 标签镜像体积小,但可能缺少部分系统库,复杂项目建议使用完整版(gcc:<version>)。探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务