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