> 백엔드 개발 > Golang > 기존 C 프로젝트에 Go 코드를 어떻게 통합할 수 있나요?

기존 C 프로젝트에 Go 코드를 어떻게 통합할 수 있나요?

DDD
풀어 주다: 2024-12-17 18:48:13
원래의
415명이 탐색했습니다.

How Can I Integrate Go Code into My Existing C Project?

기존 C 프로젝트에 Go 코드 통합

질문:
Go 코드를 호출하는 것이 가능합니까? C 프로그램에서, 그렇다면 어떻게 이것이 가능할까요? 달성되었나요?

답변:
예, Go 1.5에서는 -buildmode=c-archive 모드를 도입했습니다. 이 모드를 사용하면 Go 코드를 C 프로그램에 연결하는 데 적합한 아카이브로 컴파일할 수 있습니다. Go 코드를 기존 C 프로젝트에 통합하려면:

  1. 내보내기용 함수 표시:

    • C에서 호출할 함수는 다음과 같습니다. Go 코드에 //export comments가 표시되어 있어야 합니다.
    • 이러한 함수가 포함된 Go 패키지의 이름이 지정되어 있는지 확인하세요. main.
    • 비어 있더라도 main이라는 함수를 포함합니다.
    • C 패키지를 가져옵니다.
  2. 컴파일 가다 아카이브:

    • 다음 명령을 사용하여 Go 코드를 C 호출 가능 정적 라이브러리로 컴파일합니다.

      go build -buildmode=c-archive foo.go
      로그인 후 복사
      로그인 후 복사
    • 이렇게 하면 아카이브가 생성됩니다. 헤더 파일(예: foo.a 및 foo.h).
  3. C 프로그램 연결:

    • C 프로그램에 생성된 헤더 파일:

      #include "foo.h"
      로그인 후 복사
    • 링크 -pthread 옵션을 사용하여 Go 아카이브에 대해:

      gcc -pthread foo.c foo.a -o foo
      로그인 후 복사
      로그인 후 복사
    • 이렇게 하면 C 프로그램이 내보낸 Go 함수를 호출할 수 있습니다.

예:

다음 Go 코드를 고려해보세요. (foo.go):

package main

import "C"
import "fmt"

//export PrintInt
func PrintInt(x int) {
    fmt.Println(x)
}

func main() {}
로그인 후 복사

아카이브에 컴파일:

go build -buildmode=c-archive foo.go
로그인 후 복사
로그인 후 복사

그런 다음 C 프로그램(foo.c)에서:

#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}
로그인 후 복사

컴파일하세요:

gcc -pthread foo.c foo.a -o foo
로그인 후 복사
로그인 후 복사

foo를 실행하면 인쇄됩니다. "42".

위 내용은 기존 C 프로젝트에 Go 코드를 어떻게 통합할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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