一尘不染

从Go的so文件中调用函数

go

是否可以从Go调用静态对象(.so)文件?我一直在搜寻Google,我不断提出我可以做到的主张

lib, _ := syscall.LoadLibrary("...")

但是尝试这样做会出现错误

undefined: syscall.LoadLibrary

并搜索Godocs,但在syscall包中找不到对此功能的引用。是否可以加载库并调用其函数?


阅读 672

收藏
2020-07-02

共1个答案

一尘不染

在POSIX平台上,您可以cgo用来调用dlopen和朋友:

// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
import "C"

import fmt

func foo() {
     handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY)
     bar := C.dlsym(handle, C.CString("bar"))
     fmt.Printf("bar is at %p\n", bar)
}
2020-07-02