Go에서 정적 개체 파일의 함수 호출
Go 내에서 공유 라이브러리(.so) 파일의 함수를 호출하려고 합니다. 이 목적으로 syscall.LoadLibrary를 사용하라는 제안을 받았을 수도 있지만 "정의되지 않음: syscall.LoadLibrary" 오류가 발생했습니다.
그러나 공유 라이브러리를 로드하고 액세스하는 것은 실제로 가능합니다. Go의 기능입니다. POSIX 플랫폼에서 이를 달성하려면 cgo를 활용하고 시스템의 기본 API와 상호작용할 수 있습니다.
다음은 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>
여기서 예:
정확한 구문과 함수 이름은 기본 시스템과 컴파일러에 따라 다를 수 있습니다. cgo를 활용하고 기본 시스템 API와 상호작용함으로써 Go와 공유 라이브러리 간의 격차를 해소하고 애플리케이션의 기능을 확장할 수 있습니다.
위 내용은 Go에서 정적 개체 파일의 함수를 호출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!