>  기사  >  백엔드 개발  >  Go 기능을 기존 C 프로젝트에 통합하는 방법: 연결 오류에 대한 솔루션이 포함된 단계별 가이드?

Go 기능을 기존 C 프로젝트에 통합하는 방법: 연결 오류에 대한 솔루션이 포함된 단계별 가이드?

Susan Sarandon
Susan Sarandon원래의
2024-10-27 12:10:02951검색

How to Integrate Go Functions into Existing C Projects: A Step-by-Step Guide with Solutions for Linking Errors?

기존 C 프로젝트에서 Go를 사용하는 방법

C 프로그램에 Go 기능 통합

C 프로그램에 Go 기능 통합 Go 파일을 객체 파일(.o)로 빌드하고 이를 기존 C 프로젝트의 아카이브(.a) 파일에 통합하는 작업이 포함됩니다. 이를 통해 C 프로그램 내에서 Go 함수를 호출할 수 있습니다.

예제 코드에서 발생한 문제

사용자가 제공한 예는 연결 단계 중 오류를 보여줍니다. 이러한 오류는 C 프로그램과 달리 GCCGO가 Go 파일의 주요 기능을 기대한다는 오해에서 비롯됩니다.

Go 1.5 이상을 사용한 솔루션

Go 1.5 및 이후 버전에서는 이 문제가 해결되었습니다. Go 도구를 사용하여 C 호환 라이브러리를 구축할 수 있습니다. 이 기능을 사용하면 사용자는 질문에 제공된 대로 C 파일(main.c)을 유지하고 다음과 같이 Go 파일(main.go)을 업데이트할 수 있습니다.

<code class="go">package main

import "C"
import "fmt"

//export PrintString
func PrintString(cs *C.char) {
    s := C.GoString(cs)
    fmt.Println(s)
}

func main() {}</code>

Go 빌드 개체 파일

Go 파일을 개체 파일로 빌드하려면 다음 명령을 실행하세요.

go build -buildmode c-archive -o mygopkg.a

C 프로젝트에 통합

Go 개체 파일을 C 프로그램(_main.c)과 연결하려면 다음 명령을 사용하여 최종 바이너리를 빌드합니다.

gcc -o main _main.c mygopkg.a -lpthread

공유 라이브러리에 대한 대체 접근 방식

Go로 공유 라이브러리를 구축하려는 경우 다음 명령을 사용하면 mygopkg.so가 생성됩니다.

go build -buildmode c-shared -o mygopkg.so

공유 라이브러리를 _main.c와 연결하려면 다음 명령을 실행하세요.

LD_RUN_PATH=$(pwd) gcc -o main _main.c mygopkg.so -lpthread

참고: 링커가 런타임 중에 현재 디렉터리에서 공유 라이브러리를 찾을 수 있도록 LD_RUN_PATH를 설정하세요.

자세한 내용과 통찰력은 Go 실행 모드 디자인 문서를 참조하세요. .

위 내용은 Go 기능을 기존 C 프로젝트에 통합하는 방법: 연결 오류에 대한 솔루션이 포함된 단계별 가이드?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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