首頁 >後端開發 >Golang >Go 二進位檔案可以在執行時間動態載入和連結外部編譯的 Go 程式碼嗎?

Go 二進位檔案可以在執行時間動態載入和連結外部編譯的 Go 程式碼嗎?

Susan Sarandon
Susan Sarandon原創
2024-12-06 07:59:13787瀏覽

Can Go binaries dynamically load and link externally compiled Go code at runtime?

從Go 二進位檔案動態載入和連結

問題陳述:

給定一個已編譯的Go 二進位檔案,是否可能動態編譯外部Go檔案並將其連結到現有二進位檔案以立即使用

解決方案:

2015 年8 月的Go 1.5 版本中引入了創建共享庫的功能,該庫支援動態加載和連結。

構建和鏈接的步驟動態:

  1. 創建共享庫:

    • 使用以下指令將外部Go文件編譯為共享庫-buildmode=共享flag:

      go install -buildmode=shared my_library.go
  2. 使用動態鏈接構建二進製文件:

    • 編譯Go將使用-linkshared載入和連結共用程式庫的二進位檔案標誌:

      go build -linkshared main.go

範例:

範例:
package main

import (
    "fmt"
    "plugin"
)

func main() {
    p, err := plugin.Open("my_library.so")
    if err != nil {
        fmt.Println(err)
        return
    }

    runFoo, err := p.Lookup("RunFoo")
    if err != nil {
        fmt.Println(err)
        return
    }

    runFoo.(func())() // Call the exported function from the shared library
}

範例:

範例:範例:範例:例如的以下程式碼:注意:共享庫必須在 Go 原始碼中使用 //export RunFoo 匯出函數 RunFoo。

以上是Go 二進位檔案可以在執行時間動態載入和連結外部編譯的 Go 程式碼嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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