首页 > 解决方案 > Golang 在 Linux 中使用 .so

问题描述

如何.so在 Linux 上加载?

在 Windows 上,我做这样的事情:

h, e = syscall.LoadLibrary("name.dll") 
    if e != nil {
        log.Fatal(e)
    }
    defer syscall.FreeLibrary(h)

.so是否可以在带有库的 Linux 上做到这一点?

proc, e := syscall.GetProcAddress(h, processName) //One of the functions in the DLL
if e != nil {
    log.Fatal("errror:", e, processName)
}
pid, _, _ := syscall.Syscall6(uintptr(proc), uintptr(paramSize), a1, a2, a3, 0, 0, 0) //handler, countParam, param, 0 // zawiera jakiegoś print "Hello World" - value
fmt.Println(processName, pid)

我想获取函数(进程)地址并用它来调用 syscall.Syscall6。

使用 CGo 有答案,但它并不完整,也没有解释如何使这个函数无效并将参数传递给它。

标签: cgoshared-libraries

解决方案


推荐阅读