我想使用從 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 關注
- 163 瀏覽
添加回答
舉報
0/150
提交
取消