Heim >Backend-Entwicklung >Golang >Wie rufe ich Funktionen in statischen Objektdateien von Go aus auf?

Wie rufe ich Funktionen in statischen Objektdateien von Go aus auf?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-03 12:04:291019Durchsuche

How to Call Functions in Static Object Files from Go?

Funktionen in statischen Objektdateien von Go aus aufrufen

Sie möchten Funktionen aus einer gemeinsam genutzten Bibliotheksdatei (.so) in Go aufrufen. Während Sie möglicherweise auf Vorschläge zur Verwendung von syscall.LoadLibrary für diesen Zweck gestoßen sind, wurde bei Ihren Versuchen der Fehler „undefiniert: syscall.LoadLibrary“ angezeigt.

Es ist jedoch tatsächlich möglich, eine gemeinsam genutzte Bibliothek zu laden und darauf zuzugreifen seine Funktionen von Go. Um dies auf einer POSIX-Plattform zu erreichen, können Sie cgo nutzen und mit der nativen API des Systems interagieren.

Hier ist eine einfache Demonstration mit 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>

Hier Beispiel:

  • Die Build-Direktive beschränkt die Kompilierung auf Linux- und Darwin-Plattformen.
  • #cgo LDFLAGS: -ldl verknüpft die ausführbare Datei mit der dynamischen Linker-Bibliothek (libdl).
  • #include importiert die notwendigen C-Header für die Funktionen dlopen und dlsym.
  • Die Funktion foo lädt die gemeinsam genutzte Bibliothek, ruft den Funktionszeiger für die Funktion „bar“ ab und gibt ihre Adresse aus.

Beachten Sie, dass die genaue Syntax und die Funktionsnamen je nach zugrunde liegendem System und Compiler variieren können. Durch die Verwendung von cgo und die Interaktion mit der nativen System-API können Sie die Lücke zwischen Go und gemeinsam genutzten Bibliotheken schließen und so die Funktionen Ihrer Anwendungen erweitern.

Das obige ist der detaillierte Inhalt vonWie rufe ich Funktionen in statischen Objektdateien von Go aus auf?. 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