반응형
m1맥북에서 test db로 sqlite3를 사용하던도중 amd64환경(x86)으로 도커 이미지를 생성해야 되는 상황에 겪은 이슈입니다. 주로 c컴파일러가 없어서 발생하는 문제로 CGO_ENABLED를 조작할때 참고할 수 있습니다.
1. 크로스 컴파일 방법
(1). arm64
$ GOARCH=arm64 GOOS=linux go build -o main
(2) amd64
맥북에서 amd64(x86)로 빌드할때 주의하여야 합니다(크로스 컴파일)
$ GOARCH=amd64 GOOS=linux go build -o main
2. 에러 로그 및 해결법
Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
-> CGO_ENABLED=0 으로 설정되어있으면 sqlite3가 안돌아가므로 CGO_ENABLED=1로 변경해서 빌드
unrecognized commnad line option '-m64'
-> m1칩에서는 amd환경으로 golang을 빌드하기 위한 적당한 gcc가 없으므로 x86용 gcc를 설치
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
-> 실행할 이미지에 플랫폼을 linux/amd64로 설정
3. dockerfile
m1칩에서 해당 이슈를 맞게 되면 아래를 참고해서 빌드 or 도커파일을 작성해서 해결합니다.
FROM golang:latest as builder
WORKDIR /app
COPY ./ ./
RUN go mod download
RUN dpkg --add-architecture amd64 \
&& apt update \
&& apt-get install -y --no-install-recommends gcc-x86-64-linux-gnu libc6-dev-amd64-cross
RUN CGO_ENABLED=1 CC=x86_64-linux-gnu-gcc GOARCH=amd64 GOOS=linux go build -o main
FROM --platform=linux/amd64 ubuntu
WORKDIR /root
COPY --from=builder /app/main .
WORKDIR /app
CMD [ "./main" ]
반응형
'golang' 카테고리의 다른 글
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(2) (0) | 2022.12.07 |
---|---|
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(1) (0) | 2022.12.07 |
[golang] H4sIAAAAA??? (0) | 2022.09.19 |
[golang] 익명함수를 고루틴으로 실행시킬때의 주의점(순서와 스택) (0) | 2022.09.08 |
[golang] go-sdk-v2 athena 사용법(go-sdk-v2 athena example) (2) | 2022.09.07 |
댓글