외부 파일에서 Go의 정적 라이브러리 호출
Go 내에서 정적 개체(.so) 파일을 호출할 가능성이 의문시되었습니다. 특히 syscall.LoadLibrary() 함수 사용과 관련됩니다. 그러나 syscall 패키지를 통해 이 함수에 대한 참조를 검색하는 것은 여전히 성공하지 못합니다.
실제로 POSIX 플랫폼에서 해결책은 개발자가 C 코드와 상호 작용할 수 있도록 지원하는 cgo에 있습니다. dlopen 및 보완 기능은 cgo를 통해 액세스할 수 있으므로 라이브러리를 로드하고 해당 기능을 호출할 수 있습니다.
예를 들어 다음 Go 코드 조각은 libfoo라는 라이브러리에서 bar라는 함수를 호출하는 방법을 보여줍니다. .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>
이 코드는 cgo가 Go와 C 간의 연결을 연결하여 외부 공유 라이브러리의 기능을 활용할 수 있는 방법을 보여줍니다.
위 내용은 외부 파일에서 정적 라이브러리를 호출할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!