mieki256's diary



2026/02/22() [n年前の日記]

#1 [golang] 非MSYS2環境でFyneを使おうとして失敗

Windows11 x64 25H2 + Go 1.25.7 64bit で、GUIアプリを作成できるライブラリの Fyne を使おうとしたのだけど…。

_fyne-io/fyne: Cross platform GUI toolkit in Go inspired by Material Design

ビルドには gcc が必要になるらしいのでそのあたり試してたのだけどちょっと失敗。

結論を先に書く。MSYS2 UCRT64 の gcc を使うか、WinLibs の gcc を導入すればいい。

w64devkitを使おうとして失敗 :

w64devkit なるものを導入すれば gcc が使えるようになると知ったので試用してみた。

_skeeto/w64devkit: Portable C and C++ Development Kit for x64 (and x86) Windows

w64devkit-x64-2.5.0.7z.exe を入手して実行すると展開場所を尋ねられる。任意の場所に展開。bin/ にPATHを通して利用する。

しかし、fyne_demo をビルドしようとしたら、エラーが出てしまう。

> go install fyne.io/fyne/v2/cmd/fyne_demo@latest
go: downloading fyne.io/fyne/v2 v2.7.3
go: downloading fyne.io/fyne v1.4.3
go: downloading github.com/go-text/typesetting v0.3.3
go: downloading github.com/yuin/goldmark v1.7.8
go: downloading golang.org/x/image v0.24.0
go: downloading golang.org/x/sys v0.30.0
go: downloading fyne.io/systray v1.12.0
go: downloading github.com/fyne-io/image v0.1.1
go: downloading github.com/go-gl/glfw/v3.3/glfw v0.0.0-20240506104042-037f3cc74f2a
go: downloading github.com/fredbi/uri v1.1.1
go: downloading github.com/jeandeaual/go-locale v0.0.0-20250612000132-0ef82f21eade
go: downloading github.com/nicksnyder/go-i18n/v2 v2.5.1
go: downloading golang.org/x/text v0.22.0
go: downloading github.com/fyne-io/oksvg v0.2.0
go: downloading github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef
go: downloading github.com/go-text/render v0.2.0
go: downloading github.com/go-gl/gl v0.0.0-20231021071112-07e5d0ea2e71
go: downloading github.com/godbus/dbus/v5 v5.1.0
go: downloading github.com/jsummers/gobmp v0.0.0-20230614200233-a9de23ed2e25
go: downloading golang.org/x/net v0.35.0
go: downloading github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c
go: downloading github.com/davecgh/go-spew v1.1.1
go: downloading github.com/pmezard/go-difflib v1.0.0
# github.com/go-gl/gl/v2.1/gl
cgo: cannot parse gcc output $WORK\b311\\_cgo_.o as ELF, Mach-O, PE, XCOFF object
# github.com/go-gl/glfw/v3.3/glfw
cgo: cannot parse gcc output $WORK\b320\\_cgo_.o as ELF, Mach-O, PE, XCOFF object

ググったところ、w64devkit の gcc は BigObj なる形式のオブジェクトファイルを出力するようで、これが Go言語の cgo ―― Go言語からC言語の関数やライブラリを呼び出すための仕組みと相性が悪いというか、Go言語側が BigObj を扱えないらしい。

_debug/pe: big-obj is not supported - Issue #24341 - golang/go
_cmd/cgo: `cannot parse _cgo_.o as ELF, Mach-O, PE or XCOFF` on Windows - Issue #62236 - golang/go
_Cgo: cannot parse gcc output - Getting Help - Go Forum
_error when compiling a Go program with cgo on a 64-bit Windows 7 (v6.1 SP1) system - Issue #290 - skeeto/w64devkit

これじゃ使えないな…。w64devkit をインストールしておく意味はない…。展開場所をまるっと削除してアンインストールしておいた。

MSYS2上でビルド :

MSYS2 UCRT64上で golang をインストールして fyne_demo をビルドしてみた。その環境ならビルドも通って、動作もした。

pacman -S mingw-w64-ucrt-x86_64-go
pacman -S mingw-w64-ucrt-x86_64-toolchain

go install fyne.io/fyne/v2/cmd/fyne_demo@latest
fyne_demo

WinLibs版でビルド :

WinLibs なるものを導入することでも gcc が使えるらしい。zipを解凍して、PATHを通すだけで使える。

_WinLibs - GCC+MinGW-w64 compiler for Windows
_C言語 | MinGW-w64(WinLibs版)のダウンロードとインストール

winlibs-x86_64-posix-seh-gcc-15.2.0-mingw-w64ucrt-13.0.0-r5.zip を入手して任意の場所に解凍。今回は D:\Dev\winlibs\ucrt\mingw64\ に置いた。

bin/ にPATHを通せばgccが使えるようになるけれど、今回は winlibs_enable.bat というbatファイルを作成して、このbatファイルを実行すればPATHが通るようにしておいた。

winlibs_enable.bat
@echo off
set WINLIBSPATH=D:\Dev\winlibs\ucrt\mingw64\bin
set PATH=%WINLIBSPATH%;%PATH%
echo WinLibs (ucrt) enabled. [%WINLIBSPATH%]

この WinLibs版のgccを使ったら、fyne_demo をビルドすることができた。

go install fyne.io/fyne/v2/cmd/fyne_demo@latest
fyne_demo

依存しているDLLを調べたい :

生成したexeは、どんなDLLに依存しているのか気になった。例えば MSYS2 UCRT64上の Go でビルドして作ったexeは、MSYS2 の何か(DLL)が必要だったりしないか。そうなると、他のPCに持っていって動作させるのが面倒になる。

依存してるDLLを調べないといけない。

MSYS2上であれば、ldd が使える。

ldd ./hoge.exe


Windows上でネイティブ(?)に使えるツールは無いものだろうか…。

Dependencies というツールが使えるらしい。

_lucasg/Dependencies: A rewrite of the old legacy software "depends.exe" in C# for Windows devs to troubleshoot dll load dependencies issues.
_覚書 : Dependency Walkerはもう古い! Windows 10ならDependenciesを使え! | FRONTL1NE Community
_windows 10 では dependency walker じゃなくて dependencies を使う - いろいろ備忘録日記
_Windows10以降で.exeや.dllの依存関係を調べる方法( Dependencies ) - 放浪猫
_Dependencies: 対象DLLの変化を即座に反映する (バイナリキャッシュを無効にする方法)

Dependencies_x64_Release.zip を入手して解凍。今回は D:\Dev\Dependencies\Dependencies_x64_Release\ に置いておいた。中に入っている DependenciesGui.exe を実行すると起動する。

ウインドウに .exe をドラッグアンドドロップすれば、依存しているDLLの一覧が表示される。

とりあえず、今回ビルドした Fyne を使ってるexeは、MSYS2 関係のDLLを参照しないで、Windows11に入ってるDLLだけを参照しているように見えた。たぶんこれなら大丈夫そうかな…。

以上です。

過去ログ表示

Prev - 2026/02 -
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project