You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker中Alpine环境运行C程序报syntax error: unexpected "("错误

错误原因

报错./jjj-linux.out: line 1: syntax error: unexpected "("的核心原因是gcc编译参数错误:你在编译命令最后加了-r参数,这个参数的作用是生成可重定位的中间目标文件,而非可直接运行的ELF可执行程序。系统识别到产出文件不是合法可执行文件时,会默认调用shell解析该文件,shell读到二进制内容里的特殊字符就会抛出语法错误。
另外现有配置还有三个额外问题:

  • 未提前创建二进制输出目录/usr/jjj-app/bin,编译时可能因路径不存在失败
  • Dockerfile未指定容器启动入口,执行docker run时不会自动运行编译好的程序
  • Makefile中配置的8080端口映射无意义,示例C程序不会监听任何网络端口
修正方案

1. 修改Dockerfile

删除错误的-r编译参数,补充目录创建逻辑和启动入口,同时合并依赖安装层减小镜像体积:

FROM alpine
RUN apk add --no-cache build-base
WORKDIR /usr/jjj-app
COPY . .
RUN mkdir -p bin && gcc src/main.c -o bin/jjj-linux.out
CMD ["./bin/jjj-linux.out"]

2. 修改Makefile

删除多余的端口映射,增加--rm参数让容器运行结束后自动清理:

build-linux:
	docker build -t jjj-app .
	docker run --rm jjj-app
验证

在宿主机执行make build-linux,命令执行完成后会直接输出Hello, World!。
如果需要手动进入容器验证二进制可执行性,可执行docker run --rm -it jjj-app sh进入容器shell,进入/usr/jjj-app/bin目录后执行./jjj-linux.out即可正常运行,不会再出现语法报错。

内容的提问来源于stack exchange,提问作者Radex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:48:14