Invoking Static Libraries in Go from External Files
The possibility of invoking static object (.so) files from within Go has been questioned, particularly concerning the use of syscall.LoadLibrary() function. However, retrieving references to this function through the syscall package remains unsuccessful.
Indeed, on POSIX platforms, the solution lies in cgo, which empowers developers to interact with C code. The dlopen and complementing functions can be accessed through cgo, enabling the loading of libraries and the invocation of their functions.
For instance, the following Go code snippet illustrates how to invoke a function named bar from a library named libfoo.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>
This code exemplifies how cgo can bridge the connection between Go and C, enabling the utilization of functions from external shared libraries.
The above is the detailed content of Can Go Invoke Static Libraries from External Files?. For more information, please follow other related articles on the PHP Chinese website!