Ton*_*nyB 3 go cgo webassembly
我想使用从 Golang 构建的 WebAssembly 库编写 JS 脚本。但我需要使用C库并通过CGO使用它。
简而言之,我的代码如下所示(只是加载 C 库的示例):
package main
/*
#include <stdlib.h>
*/
import "C"
func main() {
println("Hello")
}
Run Code Online (Sandbox Code Playgroud)
但是当我想使用下面的命令按照教程中的方式构建它时,我遇到了错误。
命令:
GOARCH=wasm GOOS=js go build -o lib.wasm test.go
Run Code Online (Sandbox Code Playgroud)
输出:
can't load package: package main: build constraints exclude all Go files in [Project path]
Run Code Online (Sandbox Code Playgroud)
所以我的问题是是否有可能构建这样的东西。
谢谢。
这不会成功:基本上使 Go 编译器从Go 源代码GOARCH=wasm GOOS=js生成wasm 字节码。换句话说,Go 代码被编译为 WASM 字节码和 WASM API 调用,而不是特定于 CPU 的机器代码和对特定操作系统内核的系统调用。
另一方面,是一种将已编译的C 代码与已编译的Go 代码链接cgo的方法。要编译使用 的程序,工具链会调用真正的 C 编译器(大多数情况下),该编译器会编译 C 部分。cgogogcc
编译后的 C 代码和 WASM 字节码存在于不同的宇宙中,并且彼此不了解。理论上,C 编译器gcc可以支持 WASM\xe2\x80\x94,就像go现在的 \xe2\x80\x94 一样,但 IIRC 既不是这种情况,也不是 Go 的 WASM 后端被教导以某种方式处理这种情况。
总而言之,最典型的使用情况cgo是与用 C 编写的现有库进行交互(或公开 C 兼容的 API),并且大多数此类库通常会对它们运行的环境做出深刻的假设\xe2\ x80\x94,通常是 POSIX 兼容的操作系统(具有一组系统调用来处理文件和套接字 I/O 等)。
因此,如果您很少需要链接到“纯”C 库\xe2\x80\x94(它执行纯数据处理并且不以任何方式与底层操作系统通信),则可以查看C-to-Go 源代码翻译器。
\n| 归档时间: |
|
| 查看次数: |
2166 次 |
| 最近记录: |