9

是否可以动态加载外部 C 库 (dll) 并在 Go 中调用其函数?

我知道有cgo哪些用于静态绑定到 C 函数,但我对动态方式感兴趣。

4

1 回答 1

7

简短的回答:没有。(至少不是 gc,但是 gccgo 是 gcc 可链接的,所以它可能是可能的)

中等答案:但是,您可以静态绑定 libffi 或 libdl,然后使用来动态加载其他库。

长答案:您可以使用 go toolchains C 编译器和汇编器在 C 和 ASM 中编写 go 包(例如,参见 src/pkg/runtime)。因此,您可以在 C 或 ASM 中将 FFI 作为 go 包编写。

编辑:来自下面的评论(现在也是 CW)

或者,可以使用syscallandunsafe包来完成(在 Windows 中很容易,但我想在 linux 中会更难,并且与上面的第三个解决方案相距不远)。

http://code.google.com/p/go/wiki/CallingWindowsDLLs

于 2010-11-09T13:02:23.263 回答