我有一个.so文件,其功能我想在我的Go代码中调用。如何在Go中调用Linux共享库函数?
我该如何去做呢?我已经阅读了cgo和syscall软件包。他们接近我想要的,但我没有看到任何可以在.so文件中调用函数的地方。
我想实现Python中ctypes包的功能。
有人可以帮忙吗?
我有一个.so文件,其功能我想在我的Go代码中调用。如何在Go中调用Linux共享库函数?
我该如何去做呢?我已经阅读了cgo和syscall软件包。他们接近我想要的,但我没有看到任何可以在.so文件中调用函数的地方。
我想实现Python中ctypes包的功能。
有人可以帮忙吗?
如果要在编译时使用静态已知的共享库,则可以简单地使用cgo。阅读关于如何做到这一点的文档,但通常你会指定一些链接器标志和一些注释掉的行。以下是如何从libfoo.so
调用功能bar()
的示例。
package example
// #cgo LDFLAGS: -lfoo
//
// #include <foo.h>
import "C"
func main() {
C.bar()
}
您还可以使用cgo访问在运行时动态加载的共享对象。您可以使用dlopen()
,dlsym()
和dlclose()
来打开共享库,检索其中一个函数的地址并最终关闭该库。注意,你不能在Go中做这些事情,你必须在C中编写一些包装代码,为你实现必要的逻辑。
我看到我必须在注释部分指定头部函数,然后调用它们。让我看看我能做些什么。 –
@AgnivaDeSarker我可能会误解你的问题。让我重述一下我的答案。 – fuz
是的,这就是我想要的!我只是错过了LDFLAGS部分。 –
[我可以与Go(Google)编程语言使用共享对象吗?](http://stackoverflow.com/questions/2254777/can-i-use-shared-objects-with-go-google-编程语言) – OneOfOne