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>
Dans ce exemple :
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!