我正在try 将一个特定的Go程序编译成WASM:https://github.com/protomaps/go-pmtiles

使用以下命令:GOOS=js GOARCH=wasm go build -o go.wasm main.go会出现以下错误:

package command-line-arguments
    imports github.com/protomaps/go-pmtiles/pmtiles
    imports zombiezen.com/go/sqlite
    imports modernc.org/libc
    imports modernc.org/libc/errno: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/errno
package command-line-arguments
    imports github.com/protomaps/go-pmtiles/pmtiles
    imports zombiezen.com/go/sqlite
    imports modernc.org/libc
    imports modernc.org/libc/pthread: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/pthread
package command-line-arguments
    imports github.com/protomaps/go-pmtiles/pmtiles
    imports zombiezen.com/go/sqlite
    imports modernc.org/libc
    imports modernc.org/libc/signal: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/signal
package command-line-arguments
    imports github.com/protomaps/go-pmtiles/pmtiles
    imports zombiezen.com/go/sqlite
    imports modernc.org/libc
    imports modernc.org/libc/stdio: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/stdio
package command-line-arguments
    imports github.com/protomaps/go-pmtiles/pmtiles
    imports zombiezen.com/go/sqlite
    imports modernc.org/libc/sys/types: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/sys/types
package command-line-arguments
    imports github.com/protomaps/go-pmtiles/pmtiles
    imports zombiezen.com/go/sqlite
    imports modernc.org/libc
    imports modernc.org/libc/time: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/time
package command-line-arguments
    imports github.com/protomaps/go-pmtiles/pmtiles
    imports zombiezen.com/go/sqlite
    imports modernc.org/libc
    imports modernc.org/libc/unistd: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/unistd

我对WASM没有太多的经验.据我所知,libc包有问题. 任何谷歌搜索的"构建约束排除所有Go文件"的答案都没有达到这个目的. 它编译到我的Mac没有问题,所以我想WASM有限制,阻止了一些包的工作?如果是,这些限制是否在某个地方有所描述?是否可以让这个程序在WASM中工作,或者它只是不兼容?

推荐答案

modernc.org/sqlitethis issuego-pmtiles个公用事业部件:

.org/libc已满,是特定于目标的系统调用.我不知道这如何映射到WASM.也许Sqlite实际使用的子集包含在WASI中,但需要有人判断,我没有.

因此,似乎需要做一些工作来添加WASM支持.

据我所知,libc包在这里有一个问题

imports modernc.org/libc/errno: build constraints exclude all Go files in /Users/patryk/go/pkg/mod/modernc.org/libc@v1.41.0/errno章真的是说什么如果你看一下the folder,你会注意到所有的文件都有像_amd64.go这样的后缀.build tool将忽略与目标操作系统/架构不匹配的文件.在本例中,您正在为WASM构建,所有文件都被排除(因此出现错误).

有没有可能让这个程序在WASM中工作,或者它只是不兼容?

您需要了解go-pmtiles如何使用modernc.org/libc(通过zombiezen.com/go/sqlite导入).根据一个真正的快速浏览,它似乎是用来"转换磁盘上的现有存档为一个新的PMTiles规范版本3存档.".因此,可以Forking 库并移除不需要的功能(从而移除导入zombiezen.com/go/sqlite的需要).

Go相关问答推荐

Go Fiber和HTMX—HX—Trigger header被更改为HX—Trigger,这不是HTMX监听的内容

macOS上GoLand 2023.3.4中的代码导航

允许在 struct 中使用复合作为函数参数

在GO中使用泛型类型 struct 实现接口方法

当我有外键时,如何使用 GORM 创建数据库的新条目

在密钥不存在时处理 PATCH 部分更新

是否可以从 golang 中的参数推断类型?

errors.Wrap 和 errors.WithMessage 有什么区别

Gorm 预加载给出了模糊的列错误

如何确定作为函数参数传递的指针是否正在被修改或副本是否正在被修改?

在 Go 模板中对照片使用随机 Int

在恒等函数中将类型 T 转换为类型 U

致命错误:找不到由 zergon321/reisen 引起的libavcodec/avcodec.h文件

具有未导出字段的 struct 类型之间的转换

如何将具有嵌入式 struct 的 struct 展平为 json

Golang模板无法访问embedFS中的文件

在 Raspberry Pi4 上下载 Go Mod

vs 代码调试 go 测试不通过标志

为什么我不能使用来自 gocloak 中 Login() 的访问令牌在 KeyCloak 中创建新客户端?

使用 delve 在容器中调试 Golang:container_linux.go:380:启动容器进程导致:exec:/dlv:stat /dlv:没有这样的文件或目录