從 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中文網其他相關文章!