当前位置: 首页 > news >正文

踩坑实录:Go 1.25.x 编译的 exe 在 Windows 提示“此应用无法运行”

在 Go 1.25.x 的 Windows 版本中,使用了DWARF v5 调试信息格式,编译生成部分 Windows 加载器或安全系统无法识别的 PE 结构,从而导致 “此应用无法在你的电脑上运行”。

原理解释

从 Go 1.25 开始,官方默认启用了 dwarf5,Go 在生成可执行文件时会使用 DWARF v5 调试信息格式

DWARF 是什么?

DWARF 是一种标准的 调试信息格式,用于在二进制文件中存储:

  • 源代码行号;
  • 变量名和类型;
  • 函数符号;
  • 栈帧和调试符号表。

Go 在编译时把这些信息写进 .debug_* 段(sections)里,
运行时并不会读取这些调试段。

DWARF v5 和 v4 的区别:

对比项DWARF v4DWARF v5
引入时间Go ≤ 1.24 默认Go ≥ 1.25 默认
文件体积略大更紧凑(结构优化)
调试信息格式较旧格式,兼容性好新格式,支持更多元数据
调试器支持GDB/Delve 都支持需新版 GDB/Delve
对运行性能影响

DWARF v5 改善的是调试体验,而非运行性能。

然而:

  • Windows PE 格式对 DWARF 的支持很有限;
  • 某些 Windows 版本(包括部分 Windows 11 + SmartScreen / Core Isolation 启用的环境),对包含 DWARF v5 section 的 EXE 文件直接拒绝加载;
  • 因此,外部链接器(external linker)生成的带 DWARF v5 的可执行文件就无法运行;
  • 而内部链接器(internal linker)或关闭 DWARF v5 后(也就是退回到DWARF v4版本)则正常。

解决方法

当你执行:

set GOEXPERIMENT=nodwarf5
go build

或者在环境中永久设置(推荐):

go env -w GOEXPERIMENT=nodwarf5

这会告诉 Go:

不要使用 DWARF v5,而回退到 DWARF v4 调试信息格式。

于是编译产物恢复兼容性,编译生成的 .exe 文件可以被正常加载执行。


对比

项目Go 1.24.8Go 1.25.2 (默认)Go 1.25.2 + nodwarf5
调试信息格式DWARF v4DWARF v5DWARF v4
构建兼容性✅ 稳定❌ 可能导致“此应用无法在你的电脑上运行”✅ 稳定
链接方式内部外部外部或内部都可
推荐用途全面兼容实验性推荐默认设置



Go 1.25.x 实验性功能:

  • greenteagc:一个新的垃圾回收器,旨在降低高并发、小对象频繁分配服务中的GC开销。
  • jsonv2encoding/json包的新实现,能够提供更快的解码速度。
  • nodwarf5:如果需要与外部调试工具兼容,可以使用此选项禁用DWARFv5调试信息,回退到v4版本。

启用它们示例:GOEXPERIMENT=greenteagc,jsonv2 go build .

http://www.dtcms.com/a/482686.html

相关文章:

  • 学习网站建设有前景没wordPress登不上数据库
  • 互联网大厂Java面试:从缓存技术到安全框架的深度探索
  • 本地部署开源集成工具 Jenkins 并实现外网访问( Linux 版本)
  • HackerNews 播客生成器
  • 新网站优化品牌营销策略四种类型
  • Linux 命令:umount
  • springboot159基于springboot框架开发的景区民宿预约系统的设计与实现
  • LatchUtils:简化Java异步任务同步的利器
  • 数据库设计基础知识(3)关系运算
  • uniapp 编译支付宝小程序canvas 合成图片实例,支付宝小程序 canvas 渲染图片 可以换成自己的图片即可
  • jmeter环境搭建
  • 专业的免费网站建设网站开发怎么销售
  • 浙江网站建设cms免费无限建站
  • Java Redis “底层结构” 面试清单(含超通俗生活案例与深度理解)
  • Windows10停服!7-Zip被爆组合漏洞|附安全指南
  • 从 0 到 1 搭建完整 Python 语言 Web UI自动化测试学习系列 17--测试框架Pytest基础 1--介绍使用
  • 太原市微网站建设上海网站建设服务电话
  • QT6(鼠标键盘事件)
  • Mac应用快速启动器Alfred 5 Powerpack for Mac
  • 【Linux】——基础指令(下)
  • 做网站的域名怎么申请南宁网站建设策划外包
  • 云南企业建站网站项目怎么做
  • vue钩子函数调用问题
  • 【SpringCloud】Sentinel
  • 建设手机网站做网站有名的公司有哪些
  • JavaWeb流式传输速查宝典
  • 【hive】一种高效增量表的实现
  • AWS同一账号下创建自定义VPC并配置不同区域的对等链接
  • 企业营销网站建设公司淘宝客 网站备案
  • 软件工程的知识领域