Go可执行文件可以用作动态库吗?



我正在用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代码使用。

相关内容

  • 没有找到相关文章

最新更新