Maison > développement back-end > Golang > Comment appeler des fonctions dans des fichiers objets statiques depuis Go ?

Comment appeler des fonctions dans des fichiers objets statiques depuis Go ?

Patricia Arquette
Libérer: 2024-11-03 12:04:29
original
1043 Les gens l'ont consulté

How to Call Functions in Static Object Files from Go?

Appel de fonctions dans des fichiers d'objets statiques à partir de Go

Vous cherchez à invoquer des fonctions à partir d'un fichier de bibliothèque partagée (.so) dans Go. Bien que vous ayez peut-être rencontré des suggestions pour utiliser syscall.LoadLibrary à cette fin, vos tentatives ont rencontré l'erreur "undefined: syscall.LoadLibrary."

Cependant, il est effectivement possible de charger une bibliothèque partagée et d'y accéder. ses fonctions depuis Go. Pour y parvenir sur une plateforme POSIX, vous pouvez exploiter cgo et interagir avec l'API native du système.

Voici une démonstration simple utilisant cgo :

<code class="go">// +build linux darwin
// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>

package main

import (
    "C"
    "fmt"
)

func foo() {
    // Load the shared library
    handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY)

    // Retrieve the function pointer from the library
    bar := C.dlsym(handle, C.CString("bar"))

    // Print the function pointer address
    fmt.Printf("bar is at %p\n", bar)
}

func main() { foo() }</code>
Copier après la connexion

Dans ce exemple :

  • La directive build restreint la compilation aux plateformes Linux et Darwin.
  • #cgo LDFLAGS : -ldl lie l'exécutable à la bibliothèque de l'éditeur de liens dynamique (libdl).
  • #include importe les en-têtes C nécessaires pour les fonctions dlopen et dlsym.
  • La fonction foo charge la bibliothèque partagée, récupère le pointeur de fonction pour la fonction "bar" et imprime son adresse.

Notez que la syntaxe exacte et les noms de fonctions peuvent varier en fonction de votre système sous-jacent et de votre compilateur. En utilisant cgo et en interagissant avec l'API système native, vous pouvez combler le fossé entre Go et les bibliothèques partagées, étendant ainsi les capacités de vos applications.

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