我一直在尝试向 go build 生成的可执行文件添加图标。在内部,此可执行文件使用 webview/webview_go。
我使用
windres
从以下 .syso
文件生成 .rc
文件
#include <windows.h>
100 ICON "favicon.ico"
(用于生成的命令:
C:\mingw64\bin\windres.exe -i .\windress-res\app.rc -O coff -o cmd/app.syso
)
之后,我构建可执行文件
$env:CC = "C:\mingw64\bin\gcc.exe";
$env:CXX = "C:\mingw64\bin\g++.exe";
go build --ldflags "-linkmode=external -H=windowsgui -s -w" cmd/app.go
生成的可执行文件没有图标。
然后,我读到我必须向
--ldflags
添加一个标志:-linkmode external
,但这会产生多个与github.com/webview/webview_go(.text): relocation target webview_dispatch not defined
类似的错误。
根据我的理解,我无法使用内部 go 链接器,因为构建的 exe 使用 CGO。
如何将图标嵌入到可执行文件中?我一直在努力寻找有效的答案。
我愿意接受任何可以在我的文件中获得图标的解决方案,只要它是可编写脚本的。
啊啊,在 stackoverflow 上问问题很棒,因为我通常会在不久之后自己找到答案。这次也不例外。
通过使用 go 链接器的
-extldflags
标志,我能够使用 g++ 链接器添加图标。
这给出了以下命令(在
--ldflags
中,它从构建命令传递 go 链接器标志)。
(请注意 --ldflags
参数对单引号的更改,因为我们需要在内部使用双引号。)
$env:CC = "C:\mingw64\bin\gcc.exe";
$env:CXX = "C:\mingw64\bin\g++.exe";
go build --ldflags '-linkmode=external -H=windowsgui -s -w -extldflags "cmd/app.syso"' cmd/app.go