从外部文件调用 Go 中的静态库
从 Go 内部调用静态对象(.so)文件的可能性受到质疑,特别是关于 syscall.LoadLibrary() 函数的使用。然而,通过 syscall 包检索对该函数的引用仍然不成功。
事实上,在 POSIX 平台上,解决方案在于 cgo,它使开发人员能够与 C 代码进行交互。 dlopen 和补充函数可以通过 cgo 访问,从而能够加载库并调用其函数。
例如,以下 Go 代码片段说明了如何从名为 libfoo 的库调用名为 bar 的函数.so:
<code class="go">// #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) }</code>
此代码举例说明了 cgo 如何在 Go 和 C 之间架起桥梁,从而能够利用外部共享库中的函数。
以上是Go可以从外部文件调用静态库吗?的详细内容。更多信息请关注PHP中文网其他相关文章!