从 Go 调用静态对象文件中的函数
您寻求从 Go 中的共享库 (.so) 文件调用函数。虽然您可能遇到过为此目的使用 syscall.LoadLibrary 的建议,但您的尝试却遇到了错误“未定义:syscall.LoadLibrary”。
但是,加载共享库并访问确实是可行的它的功能来自Go。要在 POSIX 平台上实现此目的,您可以利用 cgo 并与系统的本机 API 进行交互。
这是使用 cgo 的简单演示:
<code class="go">// +build linux darwin // #cgo LDFLAGS: -ldl // #include <dlfcn.h> package main import ( "C" "fmt" ) func foo() { // Load the shared library handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY) // Retrieve the function pointer from the library bar := C.dlsym(handle, C.CString("bar")) // Print the function pointer address fmt.Printf("bar is at %p\n", bar) } func main() { foo() }</code>
在此例如:
请注意,确切的语法和函数名称可能会有所不同,具体取决于您的底层系统和编译器。通过利用 cgo 并与本机系统 API 交互,您可以弥合 Go 和共享库之间的差距,从而扩展应用程序的功能。
以上是如何从 Go 调用静态对象文件中的函数?的详细内容。更多信息请关注PHP中文网其他相关文章!