是否可以动态加载外部 C 库 (dll) 并在 Go 中调用其函数?
我知道有cgo
哪些用于静态绑定到 C 函数,但我对动态方式感兴趣。
简短的回答:没有。(至少不是 gc,但是 gccgo 是 gcc 可链接的,所以它可能是可能的)
中等答案:但是,您可以静态绑定 libffi 或 libdl,然后使用它来动态加载其他库。
长答案:您可以使用 go toolchains C 编译器和汇编器在 C 和 ASM 中编写 go 包(例如,参见 src/pkg/runtime)。因此,您可以在 C 或 ASM 中将 FFI 作为 go 包编写。
编辑:来自下面的评论(现在也是 CW)
或者,可以使用syscall
andunsafe
包来完成(在 Windows 中很容易,但我想在 linux 中会更难,并且与上面的第三个解决方案相距不远)。