首頁  >  文章  >  後端開發  >  Go可以從外部檔案呼叫靜態函式庫嗎?

Go可以從外部檔案呼叫靜態函式庫嗎?

Barbara Streisand
Barbara Streisand原創
2024-11-02 16:27:02919瀏覽

Can Go Invoke Static Libraries from External Files?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn