将Go程序打包成可执行文件的方法
将Go程序打包成可执行文件的方法 我想将我在 GitHub 上的 Go 程序构建成可执行文件,项目地址在这里。我使用了:
go -u github.com/TotallyGamerJet/OpenGLGO
但是当我尝试运行位于 $GOPATH/bin 目录下生成的可执行文件时,提示找不到我的模型文件 res/GrassModel.obj。如何让构建过程包含这些模型文件?谢谢!
谢谢!我无法解决这个问题,所以找到了 packr,它运行得很好。
编辑:刚刚意识到我需要用 packr 构建。它似乎有错误,与内存有关。看来我还是不知道该怎么办。也许我会研究一下 bindata。
您可以将资源文件包含到二进制文件中。
tmthrgd/go-bindata
tmthrgd/go-bindata
go-bindata - 一个可以将任何文件生成Go代码的小工具。用于在Go程序中嵌入二进制数据。
你遇到的问题是由于 Go 的构建工具默认只编译 Go 代码,不会自动包含静态资源文件(如模型文件)。以下是几种解决方案:
1. 使用 go build 并手动复制资源文件
在项目根目录执行:
go build -o your_executable_name
然后将 res/ 目录复制到可执行文件的同一目录。运行时,程序需从当前目录加载资源。
2. 将资源文件嵌入到可执行文件中
使用 Go 1.16+ 的 embed 包,将资源文件直接嵌入二进制文件:
import "embed"
//go:embed res/*
var resFiles embed.FS
在代码中通过 resFiles 读取文件,无需外部目录。构建时只需运行 go build,资源会自动包含。
3. 使用构建脚本或工具
编写脚本(如 Makefile)在构建时复制资源文件到输出目录,或使用工具如 packr(旧版本)管理资源。
针对你的项目:
检查代码中加载 res/GrassModel.obj 的路径。如果使用相对路径(如 ./res/GrassModel.obj),确保可执行文件与 res/ 目录位于同一路径;或改用嵌入方式避免路径问题。
选择嵌入方法最便捷,能确保资源与可执行文件一体分发。

