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

Go编译生成ar归档文件而非可执行文件的问题排查

问题:Go编译生成ar归档文件而非可执行文件,运行提示权限拒绝

我编写了一个简单的Go程序:

package kioskify

import (
    "net/http"

    "github.com/labstack/echo/v4"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Logger.Fatal(e.Start(":8000"))
}

使用Go 1.22版本,通过命令:

$ go build -ldflags="-s -w" -trimpath -o app

进行编译。尝试运行生成的app时,出现错误:

$ ./app
zsh: permission denied: ./app

执行file app命令查看属性,结果显示:

app: current ar archive

此前该编译方式一直正常,请问哪里操作出错了?


解决方案

核心原因是当前目录下存在同名的app.a归档文件,Go编译时直接复用了这个归档文件,将其复制为你指定的输出文件app,而非生成新的可执行文件。

解决步骤:

  • 删除或重命名当前目录下的app.a文件:
    rm app.a
    
  • 重新执行编译命令:
    go build -ldflags="-s -w" -trimpath -o app
    
  • 验证编译结果,执行file app,正常应显示可执行文件类型,例如:
    app: Mach-O 64-bit executable x86_64  # macOS
    # 或
    app: ELF 64-bit LSB executable, x86-64, statically linked, stripped  # Linux
    
  • 如果运行时仍提示权限问题,手动添加执行权限:
    chmod +x app
    

补充说明:Go编译工具链在指定输出文件名时,若存在同名的.a归档文件(通常是之前编译包生成的缓存文件),可能会出现这种错误复用的情况,清理旧归档文件即可解决。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 21:52:40