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