Heim >Backend-Entwicklung >Golang >Wie rufe ich Funktionen in statischen Objektdateien von Go aus auf?
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:
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!