Go에서 외부 함수 호출: .so 개체 파일 탐색
.so 개체에 저장된 C 기반 함수를 통합할 수 있습니까? Go 코드 내의 파일? 이 질문은 Go 개발자들 사이에서 호기심을 불러일으켰지만 명확한 해결책을 찾는 것이 어려울 수 있습니다.
일반적으로 제안되는 접근 방식 중 하나는 "syscall.LoadLibrary" 함수를 활용하는 것이지만 이 시도는 정의되지 않은 함수 오류로 이어지는 경우가 많습니다. Godocs에 대한 추가 조사를 통해 "syscall" 패키지에 "LoadLibrary" 기능이 없다는 것이 분명해졌습니다.
그렇다면 Go 프로그래머가 여전히 외부 라이브러리의 기능을 활용할 수 있습니까? 전적으로! POSIX 플랫폼은 CGO와 "dlopen"과 같은 기능의 조합을 사용하여 유망한 솔루션을 제공합니다. 이 접근 방식을 설명하는 예를 살펴보겠습니다.
<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>
"CGO"를 사용하고 필요한 C 함수를 정의하면 외부 라이브러리를 동적으로 로드하고 Go 코드 내에서 해당 기능에 원활하게 액세스할 수 있습니다. 이는 기존 C 기반 기능을 Go 애플리케이션에 통합하여 새로운 개발 가능성을 열어줄 가능성을 열어줍니다.
위 내용은 Go 프로그래머가 외부 라이브러리의 기능을 활용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!