問題ステートメント:
コンパイルされた Go バイナリがある場合、それは可能ですか外部 Go ファイルを動的にコンパイルし、既存のバイナリにリンクして即時実行する
解決策:
動的ロードとリンクを可能にする共有ライブラリを作成する機能は、2015 年 8 月の Go バージョン 1.5 で導入されました。
構築とリンクの手順動的:
共有ライブラリの作成:
を使用して外部 Go ファイルを共有ライブラリとしてコンパイルします。 -buildmode=共有flag:
go install -buildmode=shared my_library.go
動的リンクを使用したバイナリのビルド:
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 サイトの他の関連記事を参照してください。