6 system-calls static-libraries go
是否可以从Go调用静态对象(.so)文件?我一直在搜索谷歌,我一直在追求我能做到的主张
lib, _ := syscall.LoadLibrary("...")
Run Code Online (Sandbox Code Playgroud)
但尝试这样会产生错误
undefined: syscall.LoadLibrary
Run Code Online (Sandbox Code Playgroud)
并通过Godocs搜索我在syscall包中找不到对此函数的引用.是否可以加载库并调用其函数?
在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)
}
Run Code Online (Sandbox Code Playgroud)
就像@JimB所说的,您应该只使用CGO,并将链接放到那里的动态/静态库中。根据此示例:
// #cgo LDFLAGS: -lpng
// #include <png.h>
import "C"
...
var x:= C.png_whatever() // whatever the API is
Run Code Online (Sandbox Code Playgroud)
在此处了解更多信息:http : //blog.golang.org/c-go-cgo