首頁 > 後端開發 > Golang > 主體

Go 應用程式如何與 .so 檔案內的函數互動?

Patricia Arquette
發布: 2024-11-02 05:25:30
原創
808 人瀏覽過

How Can Go Applications Interact with Functions Inside a .so File?

從Go 呼叫SO 檔案中的函數

問題:Go 應用程式可以與靜態物件(.so) 檔案中的函數互動嗎?

答案: 是的,使用 Go 從函式庫中載入和呼叫函數是可行的。然而,內建的 syscall 套件不提供 LoadLibrary 函數,儘管網路上有相反的說法。

為了實現這一點,您可以利用 cgo,一個橋接 C 和 Go 程式碼的工具。以下是使用 POSIX C 函式庫中的 dlopen 和相關函數的範例:

<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>
登入後複製

在此範例中:

  • LDFLAGS 指定 dlopen 函式庫應連結到 Go 程式。
  • dlopen 將共享物件載入到記憶體中。
  • dlsym 擷取載入的庫中 bar 函數的位址。
  • fmt.Printf 語句輸出 bar 所在的記憶體位址

透過此方法,您可以從 Go 程式碼中無縫地呼叫外部函式庫中的函數。

以上是Go 應用程式如何與 .so 檔案內的函數互動?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!