> 백엔드 개발 > Golang > Go 바이너리가 런타임 시 외부에서 컴파일된 Go 코드를 동적으로 로드하고 연결할 수 있나요?

Go 바이너리가 런타임 시 외부에서 컴파일된 Go 코드를 동적으로 로드하고 연결할 수 있나요?

Susan Sarandon
풀어 주다: 2024-12-06 07:59:13
원래의
830명이 탐색했습니다.

Can Go binaries dynamically load and link externally compiled Go code at runtime?

Go 바이너리에서 동적 로드 및 연결

문제 설명:

컴파일된 Go 바이너리가 주어지면 가능합니까? 외부 Go 파일을 동적으로 컴파일하고 즉시 사용하기 위해 기존 바이너리에 링크합니다. 실행?

해결책:

동적 로딩 및 링크가 가능한 공유 라이브러리 생성 기능은 2015년 8월 Go 버전 1.5에 도입되었습니다.

빌드 및 링크 단계 동적으로:

  1. 공유 라이브러리 생성:

    • 다음을 사용하여 외부 Go 파일을 공유 라이브러리로 컴파일합니다. -빌드모드=공유 플래그:

      go install -buildmode=shared my_library.go
      로그인 후 복사
  2. 동적 연결을 사용하여 바이너리 빌드:

    • Go 컴파일 -linkshared를 사용하여 공유 라이브러리를 로드하고 링크할 바이너리 플래그:

      go build -linkshared main.go
      로그인 후 복사

예:

main.go에서 다음 코드를 고려하세요.

package main

import (
    "fmt"
    "plugin"
)

func main() {
    p, err := plugin.Open("my_library.so")
    if err != nil {
        fmt.Println(err)
        return
    }

    runFoo, err := p.Lookup("RunFoo")
    if err != nil {
        fmt.Println(err)
        return
    }

    runFoo.(func())() // Call the exported function from the shared library
}
로그인 후 복사

참고: 공유 라이브러리 Go 소스 코드에서 //export RunFoo를 사용하여 RunFoo 함수를 내보내야 합니다.

위 내용은 Go 바이너리가 런타임 시 외부에서 컴파일된 Go 코드를 동적으로 로드하고 연결할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿