亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

CGO 庫構建到 JS WASM 文件

CGO 庫構建到 JS WASM 文件

Go
犯罪嫌疑人X 2023-06-12 15:30:30
我想使用從 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 部分。cgogogcc

編譯后的 C 代碼和 WASM 字節碼存在于不同的宇宙中,彼此不了解。從理論上講,C 編譯器gcc可以支持 WASM——就像go現在一樣——但 IIRC 既不是這種情況,也沒有教導 Go 的 WASM 后端以某種方式處理這種情況。

總而言之,最典型的使用案例cgo是與一個用 C 編寫的現有庫接口(或公開一個與 C 兼容的 API),并且大多數此類庫通常會對它們運行的環境做出深刻的假設——這通常是一個 POSIX 兼容的操作系統(具有一組系統調用來處理文件和套接字 I/O 等)。

因此,如果您極少需要鏈接“純”C 庫——它執行純數據處理并且不以任何方式與底層操作系統通信,則可以查看 C-to -Go 源代碼翻譯器。


查看完整回答
反對 回復 2023-06-12
  • 1 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號