ホームページ >バックエンド開発 >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 を使用して共有ライブラリをロードしてリンクするバイナリflag:

      go build -linkshared main.go

例:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。