윈도우에서 cgo 라이브러리 사용하기 (github.com/pebbe/zmq4)

 윈도우 환경에서 c 라이브러리를 빌드하고 cgo 를 사용하여 go 에서 사용하는 경우가 있다. 

 

c 라이브러리의 빌드는 직접할 수도 있지만 vcpkg 에 라이브러리가 등록되어 있다면 vcpkg 를 사용하는 것이 편하다.

 

빌드된 라이브러리는 vcpkg/installed/x64-windows 의 include, lib, bin 에 위치한다.

 

cgo 는 gcc 를 사용하기 때문에 윈도우에서 gcc 를 사용할 수 있는 환경이 필요하고

 

앞서 빌드한 라이브러리는 해당 환경에 옮겨져야 한다. 

 

윈도우에서 gcc 를 사용할 수 있는 라이브러리로는 mingw 가 있고

 

mingw 가 참조하고 있는 include, lib, bin 에 라이브러리를 옮겨야 하는 것이다. 

 

그리고 실행시점에는 dll 을 참조할 수 있어야하는데 실행파일과 동일한 위치에 dll 을 복사하거나

 

윈도우 환경변수의 Path 에 dll 의 위치를 넣어줘야 한다.

 

 

github.com/pebbe/zmq4 를 예제로 과정을 정리해보자.

 

zmq4 는 libzmq 를 사용한다. 따라서 우선 vcpkg 로 zeromq 를 설치한다. 

 

vcpkg/installed/x64-windows 폴더의 include, lib, bin 폴더에 각각 

 

zmq.h, libzmq-mt-4_3_3.lib, libzmq-mt-4_3_3.dll 이 생성된다. 

 

윈도우 환경변수 Path 에 vcpkg/installed/x64-windows/bin 폴더를 추가한다. 

 

mingw 라이브러리로는 TDM-GCC 를 사용했다. 설치후 폴더를 확인해보면 

 

x86_64-w64-mingw32 폴더를 찾을 수 있고 해당 폴더에서 include, lib, bin 폴더를 확인할 수 있다. 

 

 

vcpkg/installed/x64-windows/include/zmq.h 를 TDM-GCC-64/x86_64-w64-mingw32/include 에 복사한다.

 

vcpkg/installed/x64-windows/lib/libzmq-mt-4_3_3.lib 를 TDM-GCC-64/x86_64-w64-mingw32/lib 에 libzmq.lib 로 복사한다. zmq4 는 유닉스 환경에서 설치된 zeromq 의 형태를 기반으로 lib 를 찾기 때문에 libzmq 형태로 복사한다.

 

 

이렇게 zmq4 를 설치하기 위한 환경을 설정하고 go get github.com/pebbe/zmq4 으로 zmq4 라이브러리를 설치한다.

 

visual studio code 로 zmq4 를 사용해보면 intelliSense 와 debugging 모두 정상적으로 동작한다. 

 

대신 exe 로 실행파일을 만들어서 배포하는 경우 libzmq-mt-4_3_3.dll 도 함께 배포해야 한다.

댓글

이 블로그의 인기 게시물

react + typescript + leaflet