Heim  >  Artikel  >  Backend-Entwicklung  >  Kann Go statische Bibliotheken aus externen Dateien aufrufen?

Kann Go statische Bibliotheken aus externen Dateien aufrufen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-02 16:27:02919Durchsuche

Can Go Invoke Static Libraries from External Files?

Aufrufen statischer Bibliotheken in Go aus externen Dateien

Die Möglichkeit, statische Objektdateien (.so) aus Go heraus aufzurufen, wurde in Frage gestellt. insbesondere im Hinblick auf die Verwendung der Funktion syscall.LoadLibrary(). Das Abrufen von Verweisen auf diese Funktion über das Syscall-Paket bleibt jedoch erfolglos.

Tatsächlich liegt die Lösung auf POSIX-Plattformen in cgo, das Entwicklern die Interaktion mit C-Code ermöglicht. Auf die dlopen- und ergänzenden Funktionen kann über cgo zugegriffen werden, was das Laden von Bibliotheken und den Aufruf ihrer Funktionen ermöglicht.

Der folgende Go-Codeausschnitt veranschaulicht beispielsweise, wie eine Funktion namens bar aus einer Bibliothek namens libfoo aufgerufen wird .so:

<code class="go">// #cgo LDFLAGS: -ldl
// #include <dlfcn.h>
import "C"

import fmt

func foo() {
     handle := C.dlopen(C.CString("libfoo.so"), C.RTLD_LAZY)
     bar := C.dlsym(handle, C.CString("bar"))
     fmt.Printf("bar is at %p\n", bar)
}</code>

Dieser Code veranschaulicht, wie cgo die Verbindung zwischen Go und C überbrücken kann und so die Nutzung von Funktionen aus externen gemeinsam genutzten Bibliotheken ermöglicht.

Das obige ist der detaillierte Inhalt vonKann Go statische Bibliotheken aus externen Dateien aufrufen?. 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