> 백엔드 개발 > Golang > C 프로그램 내에서 Go 코드를 어떻게 호출할 수 있나요?

C 프로그램 내에서 Go 코드를 어떻게 호출할 수 있나요?

DDD
풀어 주다: 2024-12-27 07:41:17
원래의
958명이 탐색했습니다.

How Can I Call Go Code from Within a C Program?

기존 C 프로젝트와 Go 통합: C에서 Go 코드 호출

Go 1.5 출시 이후 기존 C 프로젝트와 Go를 통합할 가능성이 나타났습니다. 이 가이드의 목표는 C 프로그램 내에서 Go 코드를 호출하는 방법에 대한 질문을 해결하는 것입니다.

Go 1.5에서는 -buildmode=c-archive 옵션을 도입하여 C 호출 가능 아카이브 생성을 용이하게 했습니다. 그러나 필요한 헤더 파일을 생성하는 데 어려움이 있을 수 있습니다. 이 문제를 해결하려면 함수를 내보낸 CGo 기호로 표시하는 것이 중요합니다.

설명을 위해 foo.go에서 다음 Go 코드를 고려하세요.

package main

import (
    "C"
    "fmt"
)

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

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

이 코드를 C로 컴파일하려면 -호출 가능한 정적 라이브러리인 경우 다음 명령을 실행합니다.

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

이 명령은 아카이브(foo.a)와 헤더 파일을 생성합니다. (foo.h). 헤더 파일에는 다음과 같은 선언이 포함됩니다.

typedef long long GoInt64;
typedef GoInt64 GoInt;
extern void PrintInt(GoInt p0);
로그인 후 복사

이러한 선언을 사용하면 이제 C 프로그램에서 내보낸 함수를 호출할 수 있습니다.

#include "foo.h"

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

이 C 프로그램을 컴파일하려면:

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

Go 런타임은 스레드를 활용하므로 -pthread 옵션이 필요합니다. 실행 시 프로그램은 42를 출력합니다.

이러한 단계를 따르면 기존 C 프로젝트 내에서 Go 코드를 효과적으로 사용하여 C에서 제공하는 낮은 수준의 액세스를 유지하면서 Go의 더 높은 수준 기능의 이점을 누릴 수 있습니다. .

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

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