登录
首页 >  Golang >  Go问答

如何在 Go 中调用 linux 共享库函数?

来源:Golang技术栈

时间:2023-04-22 13:11:11 299浏览 收藏

最近发现不少小伙伴都对Golang很感兴趣,所以今天继续给大家介绍Golang相关的知识,本文《如何在 Go 中调用 linux 共享库函数?》主要内容涉及到golang等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

问题内容

我有一个 .so 文件,我想在我的 Go 代码中调用它的函数。

我该怎么做呢?我已经阅读了 cgo 和 syscall 包。它们接近我想要的,但我看不到任何可以调用 .so 文件中的函数的地方。

我想完全实现 ctypes 包在 Python 中的功能。

有人可以帮忙吗?

正确答案

如果您想使用在编译时静态已知的共享库,您可以简单地使用cgo。阅读有关如何准确执行此操作的文档,但通常您会指定一些链接器标志和几行注释掉的行。这是一个关于如何bar()libfoo.so.

package example

// #cgo LDFLAGS: -lfoo
//
// #include 
import "C"

func main() {
    C.bar()
}

您还可以使用 cgo 访问在运行时动态加载的共享对象。您可以使用dlopen()dlsym()dlclose()来打开一个共享库,检索其中一个函数的地址,最后关闭该库。请注意,您不能在 Go 中做这些事情,您必须用 C 编写一些包装器代码来为您实现必要的逻辑。

今天关于《如何在 Go 中调用 linux 共享库函数?》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于golang的内容请关注golang学习网公众号!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表