從外部檔案呼叫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中文網其他相關文章!