【发布时间】:2014-06-10 19:23:09
【问题描述】:
我有一个 .so 文件,我想在我的 Go 代码中调用它的函数。
我该怎么做呢?我已经阅读了 cgo 和 syscall 包。它们接近我想要的,但我没有看到任何可以调用 .so 文件中的函数的地方。
我想完全实现 ctypes 包在 Python 中的功能。
有人可以帮忙吗?
【问题讨论】:
标签: go shared-libraries
我有一个 .so 文件,我想在我的 Go 代码中调用它的函数。
我该怎么做呢?我已经阅读了 cgo 和 syscall 包。它们接近我想要的,但我没有看到任何可以调用 .so 文件中的函数的地方。
我想完全实现 ctypes 包在 Python 中的功能。
有人可以帮忙吗?
【问题讨论】:
标签: go shared-libraries
如果您想使用在编译时静态已知的共享库,您可以简单地使用cgo。阅读有关如何准确执行此操作的文档,但通常您会指定一些链接器标志和几行注释掉的行。这是一个关于如何从libfoo.so 调用函数bar() 的示例。
package example
// #cgo LDFLAGS: -lfoo
//
// #include <foo.h>
import "C"
func main() {
C.bar()
}
您还可以使用 cgo 访问在运行时动态加载的共享对象。您可以使用dlopen()、dlsym() 和dlclose() 打开共享库,检索其中一个函数的地址,最后关闭该库。请注意,你不能在 Go 中做这些事情,你必须用 C 编写一些包装代码来为你实现必要的逻辑。
【讨论】:
libfoo.so?