>  기사  >  백엔드 개발  >  외부 파일에서 정적 라이브러리를 호출할 수 있나요?

외부 파일에서 정적 라이브러리를 호출할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-11-02 16:27:02919검색

Can Go Invoke Static Libraries from External Files?

외부 파일에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.