Maison > développement back-end > Golang > Les binaires Go peuvent-ils charger et lier dynamiquement du code Go compilé en externe au moment de l'exécution ?

Les binaires Go peuvent-ils charger et lier dynamiquement du code Go compilé en externe au moment de l'exécution ?

Susan Sarandon
Libérer: 2024-12-06 07:59:13
original
781 Les gens l'ont consulté

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

Chargement dynamique et liaison à partir d'un binaire Go

Énoncé du problème :

Étant donné un binaire Go compilé, est-ce possible pour compiler dynamiquement un fichier Go externe et le lier au binaire existant pour une utilisation immédiate exécution ?

Solution :

La possibilité de créer des bibliothèques partagées, qui permettent un chargement et une liaison dynamiques, a été introduite dans la version 1.5 de Go en août 2015.

Étapes pour créer et créer un lien Dynamiquement :

  1. Créer une bibliothèque partagée :

    • Compilez le fichier Go externe en tant que bibliothèque partagée à l'aide du -buildmode=partagé flag :

      go install -buildmode=shared my_library.go
      Copier après la connexion
  2. Construire un binaire avec des liens dynamiques :

    • Compiler le Go binaire qui chargera et liera la bibliothèque partagée en utilisant le -linkshared flag :

      go build -linkshared main.go
      Copier après la connexion

Exemple :

Considérez le code suivant dans 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
}
Copier après la connexion

Remarque : La bibliothèque partagée doit exporter la fonction RunFoo en utilisant //export RunFoo dans le code source Go.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal