我正在用GoLang编写一个通用库,并希望发布它(像一个动态库),以便用任何语言编写的其他应用程序使用。
如果我用C/c++编写这个库,我将生成一个.dll或.so文件,可以导入并在任何其他语言中使用。我在高朗怎么能这么做?
如果我只是生成一个Go可执行文件,我可以使用它而不是一个动态库吗?
你可以在Go中构建一个C共享库,这将生成一个具有与C调用约定兼容的导出函数的常规.dll
或.so
,以便可以从其他语言调用它们。
用go build -buildmode=c-shared
编译
参见go build
命令-构建模式
例如:
src/go/main.go
:
package main
import "C"
import "fmt"
//export helloLib
func helloLib(x C.int) {
fmt.Printf("Hello from Go! x=%dn", x)
}
func main() {}
src/c/main.c
:
void helloLib(int);
int main() {
helloLib(12345);
}
构建和运行:
$ go build -buildmode=c-shared -o libmy.so ./src/go/
$ gcc -o test src/c/main.c libmy.so
$ ./test
Hello from Go! x=12345
$
我相信使用go是可能的:https://pkg.go.dev/cmd/cgo
说明Go函数可以导出以供C代码使用。