我想使用从 Golang 构建的 webassembly 库编写 JS 脚本。但我需要使用 C 库并通过 CGO 使用它。简而言之,我的代码如下所示(只是加载 C 库的示例):package main/*#include <stdlib.h>*/import "C"func main() { println("Hello")}但是当我想像教程中那样使用下面的命令构建它时,我遇到了错误。命令:GOARCH=wasm GOOS=js go build -o lib.wasm test.go输出:can't load package: package main: build constraints exclude all Go files in [Project path]所以我的问题更多,是否有可能构建这样的东西。
1 回答
蓝山帝景
TA贡献1843条经验 获得超7个赞
那不会飞:基本上让 Go 编译器从Go 源代码GOARCH=wasm GOOS=js
生成wasm 字节码。换句话说,Go 代码被编译为 WASM 字节码和 WASM API 调用,而不是特定于 CPU 的机器代码和对特定操作系统内核的系统调用。
另一方面,是一种将编译后的C 代码与编译后的Go 代码链接起来cgo
的方法。为了编译一个使用 的程序,工具链调用一个真正的 C 编译器(大部分时间),它编译 C 部分。cgo
go
gcc
编译后的 C 代码和 WASM 字节码存在于不同的宇宙中,彼此不了解。从理论上讲,C 编译器gcc
可以支持 WASM——就像go
现在一样——但 IIRC 既不是这种情况,也没有教导 Go 的 WASM 后端以某种方式处理这种情况。
总而言之,最典型的使用案例cgo
是与一个用 C 编写的现有库接口(或公开一个与 C 兼容的 API),并且大多数此类库通常会对它们运行的环境做出深刻的假设——这通常是一个 POSIX 兼容的操作系统(具有一组系统调用来处理文件和套接字 I/O 等)。
因此,如果您极少需要链接“纯”C 库——它执行纯数据处理并且不以任何方式与底层操作系统通信,则可以查看 C-to -Go 源代码翻译器。
- 1 回答
- 0 关注
- 117 浏览
添加回答
举报
0/150
提交
取消