Heim >Backend-Entwicklung >Golang >Können Go-Binärdateien extern kompilierten Go-Code zur Laufzeit dynamisch laden und verknüpfen?

Können Go-Binärdateien extern kompilierten Go-Code zur Laufzeit dynamisch laden und verknüpfen?

Susan Sarandon
Susan SarandonOriginal
2024-12-06 07:59:13787Durchsuche

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

Dynamisches Laden und Verknüpfen von einer Go-Binärdatei

Problemstellung:

Ist dies bei einer kompilierten Go-Binärdatei möglich? um eine externe Go-Datei dynamisch zu kompilieren und sie sofort mit der vorhandenen Binärdatei zu verknüpfen Ausführung?

Lösung:

Die Möglichkeit, gemeinsam genutzte Bibliotheken zu erstellen, die dynamisches Laden und Verknüpfen ermöglichen, wurde im August 2015 in Go Version 1.5 eingeführt.

Schritte zum Erstellen und Verknüpfen Dynamisch:

  1. Gemeinsame Bibliothek erstellen:

    • Kompilieren Sie die externe Go-Datei als gemeinsam genutzte Bibliothek mithilfe von -buildmode=shared flag:

      go install -buildmode=shared my_library.go
  2. Binärdatei mit dynamischer Verknüpfung erstellen:

    • Kompilieren Sie das Go Binärdatei, die die gemeinsam genutzte Bibliothek mithilfe von -linkshared lädt und verknüpft flag:

      go build -linkshared main.go

Beispiel:

Betrachten Sie den folgenden Code in 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
}

Hinweis: Die gemeinsam genutzte Bibliothek muss die Funktion RunFoo mit //export exportieren RunFoo im Go-Quellcode.

Das obige ist der detaillierte Inhalt vonKönnen Go-Binärdateien extern kompilierten Go-Code zur Laufzeit dynamisch laden und verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn