我正在使用Go和Wails.App开发一个项目,这是一个基于Gtk3和libWebkit的Linux版本的GUI框架。
如果我以标准方式动态编译,该程序就可以工作。
但我只是想让它静态编译,使用 Musl 而不是 Glibc。 Musl 已成功安装在我的机器上。并且我安装了 libgtk-3-dev 和 libwebkit2gtk-4.0-dev。
因此,正如我对标准 go 工具链所做的那样,我将一些 ldflags 传递给 wails 构建器:
$> CC=/usr/local/musl/bin/musl-gcc wails build --ldflags '-linkmode external -extldflags "-static"'
但是 go 工具链似乎无法获取链接库的路径:
Wails v1.7.0-pre1 - Building Application
✓ Skipped frontend dependencies (-f to force rebuild)
✓ Building frontend...
⣾ Ensuring Dependencies are up to date...# github.com/wailsapp/wails/lib/renderer/webview
/usr/bin/ld : cannot find -lwebkit2gtk-4.0
/usr/bin/ld : cannot find -lgtk-3
/usr/bin/ld : cannot find -lgdk-3
/usr/bin/ld : cannot find -lpangocairo-1.0
/usr/bin/ld : cannot find -lpango-1.0
/usr/bin/ld : cannot find -latk-1.0
/usr/bin/ld : cannot find -lcairo-gobject
/usr/bin/ld : cannot find -lcairo
/usr/bin/ld : cannot find -lgdk_pixbuf-2.0
/usr/bin/ld : cannot find -lsoup-2.4
/usr/bin/ld : cannot find -lgio-2.0
/usr/bin/ld : cannot find -ljavascriptcoregtk-4.0
/usr/bin/ld : cannot find -lgobject-2.0
/usr/bin/ld : cannot find -lglib-2.0
collect2: error: ld returned 1 exit status
✗ Ensuring Dependencies are up to date...
Error: exit status 2
也许有一些有用的信息
$> echo $LD_LIBRARY_PATH
(空)
$> ls /usr/local/lib
cmake gnucobol libcob.a libcob.la libcob.so libcob.so.4 libcob.so.4.0.0 libglfw3.a libnanogui.so libui.so libui.so.0 nanogui.cpython-37m-x86_64-linux-gnu.so pkgconfig python2.7 python3.7 x86_64-linux-gnu
$> ls /usr/lib
accountsservice dpkg initramfs-tools libgdal.so.20 libmfhdfalt.so.0.0.0 libsidplay2.so.1.0.1 nodejs software-properties
apparmor ebtables inkscape libgdal.so.20.5.2 libmono-2.0.a libspnav.so.0 nvidia ssl
apt eject ipxe libgdiplus.so libmono-2.0.so libspnav.so.0.1 ogdi sudo
aspell emacsen-common ispell libgdiplus.so.0 libmono-btls-shared.so libvirt openssh sysctl.d
at-spi2-core encfs java-wrappers libgdiplus.so.0.0.0 libmono-llvm.a libvpf.so.4 os-prober syslinux
avahi environment.d kauth libgimp-2.0.so.0 libmono-llvm.so libvpf.so.4.1 os-probes SYSLINUX
bfd-plugins file kernel libgimp-2.0.so.0.1000.8 libmono-llvm.so.0 linux os-release syslinux-legacy
binfmt.d firefox klibc libgimpbase-2.0.so.0 libmono-llvm.so.0.0.0 linux-boot-probes osspd systemd
binfmt-support firefox-addons klibc-KzNL5rI0ooqhK-koTVzHy10DW4w.so libgimpbase-2.0.so.0.1000.8 libmono-native.so linux-sound-base p7zip sysusers.d
blt2.5 firmware language-selector libgimpcolor-2.0.so.0 libmono-native.so.0 llvm-7 packagekit tc
bluetooth fwupd ld-linux.so.2 libgimpcolor-2.0.so.0.1000.8 libmono-native.so.0.0.0 llvm-8 pcmciautils tcl8.6
bolt gcc ld-musl-x86_64.so.1 libgimpconfig-2.0.so.0 libMonoPosixHelper.so llvm-9 phantomjs tcltk
bridge-utils geoclue-2.0 libadplug-2.2.1.so.0 libgimpconfig-2.0.so.0.1000.8 libmonosgen-2.0.a locale pkgconfig terminfo
cantata gettext libadplug-2.2.1.so.0.0.0 libgimpmath-2.0.so.0 libmonosgen-2.0.so lp_solve pkg-config.multiarch tmpfiles.d
clang ghostscript libarmadillo.so.9 libgimpmath-2.0.so.0.1000.8 libmonosgen-2.0.so.1 lsb pm-utils ubiquity
cli gimp libarmadillo.so.9.600.5 libgimpmodule-2.0.so.0 libmonosgen-2.0.so.1.0.0 man-db policykit-1 ubuntu-advantage
cmake girepository-1.0 libau.so libgimpmodule-2.0.so.0.1000.8 libMonoSupportW.so mecab pppd ubuntu-release-upgrader
cnf-update-db git-core libau.so.2 libgimpthumb-2.0.so.0 libnetpbm.so.10 memtest86+ pulse-13.0 udev
colord gnome-settings-daemon-3.0 libau.so.2.10 libgimpthumb-2.0.so.0.1000.8 libnetpbm.so.10.0 mime python2.7 udisks2
command-not-found gnupg libblosc.so.1 libgimpui-2.0.so.0 libogdi.so.4 modprobe.d python3 ufw
compat-ld gnupg2 libblosc.so.1.15.1 libgimpui-2.0.so.0.1000.8 libogdi.so.4.1 modules python3.7 unity-settings-daemon-1.0
console-setup GNUstep libBLT.2.5.so.8.6 libgimpwidgets-2.0.so.0 libOpenColorIO.so.1 modules-load.d python3.8 upower
cpp gold-ld libBLTlite.2.5.so.8.6 libgimpwidgets-2.0.so.0.1000.8 libOpenColorIO.so.1.1.1 mono qemu valgrind
crda groff libchm.so.1 libgnustep-base.so.1.26 libprojectM.so.2 monodevelop qt5 virtualbox
cryptsetup grub libchm.so.1.0.0 libgnustep-base.so.1.26.0 libprojectM.so.2.1.0 monodoc recovery-mode wine
cups grub-legacy libdfalt.so.0 libhardsid-builder.so.0 libpsm1 mono-source-libs rpm X11
dart gtk-2.0 libdfalt.so.0.0.0 libhardsid-builder.so.0.0.1 libqmi mozilla rsyslog x86_64-linux-gnu
dbus-1.0 gvfs libepub.so.0 libkolabxml.so.1 libreoffice mysql ruby x86_64-linux-musl
dconf hdparm libepub.so.0.2.1 libkolabxml.so.1.1.6 libresid-builder.so.0 netplan sasl2 xorg
debug i386-linux-gnu libfreecell-solver.so.0 libmbim libresid-builder.so.0.0.1 networkd-dispatcher sbcl xserver-xorg-video-intel
dkms init libfreecell-solver.so.0.6.0 libmfhdfalt.so.0 libsidplay2.so.1 NetworkManager snapd
$> pkg-config --cflags webkit2gtk-4.0
-pthread -I/usr/include/webkitgtk-4.0 -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0 -I/usr/include/cairo -I/usr/include/libdrm -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/fribidi -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libsoup-2.4 -I/usr/include/libxml2 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/webkitgtk-4.0 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include
作为GTK本身的替代方案,您可以尝试更新的(2024)
cznic/tk9.0
项目。
它是一个无 CGo、跨平台的 Go GUI 工具包
package main
import _ "embed"
import . "modernc.org/tk9.0"
//go:embed gopher.png
var gopher []byte
func main() {
Pack(Label(Image(NewPhoto(Data(gopher)))),
TExit(),
Padx("1m"), Pady("2m"), Ipadx("1m"), Ipady("1m"))
App.Center().Wait()
}
这样,您就可以回避这些编译问题。