confluent-kafka-go
confluent-kafka-go copied to clipboard
gcc: error: unrecognized command-line option '-m64'
Description
I'm trying to build a binary for the Docker image, however I'm running into quite a gcc error when running go build
.
How to reproduce
Dockerfile
FROM golang:1.17-alpine AS builder
ENV PATH="/go/bin:${PATH}"
ENV GO111MODULE=on
ENV CGO_ENABLED=1
ENV GOOS=linux
ENV GOARCH=amd64
WORKDIR /go/src
COPY go.mod .
COPY go.sum .
RUN go mod download
RUN apk -U add ca-certificates
RUN apk update && apk upgrade && apk add pkgconf git bash build-base sudo
RUN git clone https://github.com/edenhill/librdkafka.git && cd librdkafka && ./configure --disable-sasl --prefix /usr && make && make install
COPY . .
RUN go build -tags musl --ldflags "-extldflags -static" -o main .
The issue I'm seeing is:
/go/src # go build -tags musl --ldflags "-extldflags -static" -o main -x .
WORK=/tmp/go-build2449370025
cd /go/src
git status --porcelain
cd /go/src
git -c log.showsignature=false show -s --format=%H:%ct
mkdir -p $WORK/b062/
cd /usr/local/go/src/runtime/cgo
TERM='dumb' CGO_LDFLAGS='"-g" "-O2" "-lpthread"' /usr/local/go/pkg/tool/linux_arm64/cgo -objdir $WORK/b062/ -importpath runtime/cgo -import_runtime_cgo=false -import_syscall=false -- -I $WORK/b062/ -g -O2 -Wall -Werror -fno-stack-protector ./cgo.go
# runtime/cgo
gcc: error: unrecognized command-line option '-m64'
go env
GOENV="/root/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/go"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_arm64"
GOVCS=""
GOVERSION="go1.19.3"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/go/src/go.mod"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1778568512=/tmp/go-build -gno-record-gcc-switches"
I'm using Mac OS v12.4, on a M2 chip
.
Seems similar to: https://github.com/confluentinc/confluent-kafka-go/issues/768
Hm, I was able to bypass this issue by unsetting the GOOS
and GOARCH
variables, then ran go build -tags dynamic
as opposed to musl
or static
(both were erring out)
I had the same problem
MacBook Pro (13-inch, M1, 2020)
Dockerfile
FROM golang
ENV GOPROXY=https://goproxy.cn,direct
ENV GOPRIVATE=e.coding.net
ENV GO111MODULE=on
ENV CGO_ENABLED=1
WORKDIR /usr/src/app
go env
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="arm64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/go/pkg/mod"
GONOPROXY="e.coding.net"
GONOSUMDB="e.coding.net"
GOOS="linux"
GOPATH="/go"
GOPRIVATE="e.coding.net"
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_arm64"
GOVCS=""
GOVERSION="go1.19.3"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/usr/src/app/server/src/gameServer/go.mod"
GOWORK="/usr/src/app/server/src/go.work"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build818491577=/tmp/go-build -gno-record-gcc-switches"
go build -x
WORK=/tmp/go-build641534076
cd /usr/src/app
git status --porcelain
cd /usr/src/app
git -c log.showsignature=false show -s --format=%H:%ct
mkdir -p $WORK/b115/
cd /usr/local/go/src/runtime/cgo
TERM='dumb' CGO_LDFLAGS='"-g" "-O2" "-lpthread"' /usr/local/go/pkg/tool/linux_arm64/cgo -objdir $WORK/b115/ -importpath runtime/cgo -import_runtime_cgo=false -import_syscall=false -- -I $WORK/b115/ -g -O2 -Wall -Werror -fno-stack-protector ./cgo.go
# runtime/cgo
gcc: error: unrecognized command-line option '-m64'
Try
1. Compile On Local Computer
git clone [email protected]:confluentinc/confluent-kafka-go.git
cd confluent-kafka-go/examples/consumer_example
export CGO_ENABLED=1 GOOS=linux GOARCH=amd64
go build -x
WORK=/var/folders/9x/j3pkfslx1xqgn154vzlwytp80000gp/T/go-build498013363
cd /Users/mmobay202208/Data/confluent-kafka-go
git status --porcelain
cd /Users/mmobay202208/Data/confluent-kafka-go
git -c log.showsignature=false show -s --format=%H:%ct
mkdir -p $WORK/b058/
cd /opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo
TERM='dumb' CGO_LDFLAGS='"-g" "-O2" "-lpthread"' /opt/homebrew/Cellar/go/1.19.3/libexec/pkg/tool/darwin_arm64/cgo -objdir $WORK/b058/ -importpath runtime/cgo -import_runtime_cgo=false -import_syscall=false -- -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector ./cgo.go
cd $WORK
clang -fno-caret-diagnostics -c -x c - -o /dev/null || true
clang -Qunused-arguments -c -x c - -o /dev/null || true
clang -Wl,--no-gc-sections -x c - -o /dev/null || true
clang -fdebug-prefix-map=a=b -c -x c - -o /dev/null || true
clang -gno-record-gcc-switches -c -x c - -o /dev/null || true
cd $WORK/b058
TERM='dumb' clang -I /opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I ./ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o ./_x001.o -c _cgo_export.c
TERM='dumb' clang -I /opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I ./ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o ./_x002.o -c cgo.cgo2.c
cd /opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x003.o -c gcc_context.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x004.o -c gcc_fatalf.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x005.o -c gcc_libinit.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x006.o -c gcc_linux_amd64.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x007.o -c gcc_mmap.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x008.o -c gcc_setenv.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x009.o -c gcc_sigaction.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x010.o -c gcc_traceback.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x011.o -c gcc_util.c
TERM='dumb' clang -I . -fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=$WORK/b058=/tmp/go-build -gno-record-gcc-switches -I $WORK/b058/ -g -O2 -Wall -Werror -fno-stack-protector -fdebug-prefix-map=/opt/homebrew/Cellar/go/1.19.3/libexec/src/runtime/cgo=/_/runtime/cgo -o $WORK/b058/_x012.o -c linux_syscall.c
# runtime/cgo
linux_syscall.c:67:13: error: implicit declaration of function 'setresgid' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
linux_syscall.c:67:13: note: did you mean 'setregid'?
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h:593:6: note: 'setregid' declared here
linux_syscall.c:73:13: error: implicit declaration of function 'setresuid' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
linux_syscall.c:73:13: note: did you mean 'setreuid'?
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h:595:6: note: 'setreuid' declared here
2. musl-cross compile
brew install FiloSottile/musl-cross/musl-cross
git clone [email protected]:confluentinc/confluent-kafka-go.git
cd confluent-kafka-go/examples/consumer_example
export CGO_ENABLED=1 GOOS=linux GOARCH=amd64 CC=x86_64-linux-musl-cc CXX=x86_64-linux-musl-cc++
go build -x
# github.com/confluentinc/confluent-kafka-go/examples/consumer_example
/opt/homebrew/Cellar/go/1.19.3/libexec/pkg/tool/darwin_arm64/link: running x86_64-linux-musl-cc failed: exit status 1
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_mock.o): in function `rd_kafka_mock_topic_new':
(.text+0x1a88): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_mock.o): in function `rd_kafka_mock_topic_set_error':
(.text+0x29b3): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_mock.o): in function `rd_kafka_mock_topic_create':
(.text+0x2a47): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_mock.o): in function `rd_kafka_mock_partition_set_leader':
(.text+0x2ae7): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_mock.o): in function `rd_kafka_mock_partition_set_follower':
(.text+0x2b77): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_mock.o):(.text+0x2c0d): more undefined references to `__strdup' follow
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_metadata.o): in function `rd_kafka_parse_Metadata':
(.text+0x4f2f): undefined reference to `__strndup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_metadata.o): in function `rd_list_string_copy':
(.text+0x7d52): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_metadata.o): in function `rd_kafka_metadata_leader_query_tmr_cb':
(.text+0x8b83): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_partition.o): in function `rd_kafka_topic_partition_list_add0':
(.text+0x31ba): undefined reference to `__strdup'
/opt/homebrew/Cellar/musl-cross/0.9.9_1/libexec/bin/../lib/gcc/x86_64-linux-musl/9.2.0/../../../../x86_64-linux-musl/bin/ld: /Users/mmobay202208/Data/confluent-kafka-go/kafka/librdkafka_vendor/librdkafka_glibc_linux.a(rdkafka_partition.o): in function `rd_kafka_toppar_enq_error':
(.text+0x5486): undefined reference to `__strdup'
I konw is cross compilation
problem 。But There is no solution。。。
I had the same problem MacBook Pro M2, 2022
If you need CGO_ENABLED=1
, for GOOS=linux
and GOARCH=amd64
, try adding --platform=linux/amd64
after your FROM
clauses
e.g.
FROM --platform=linux/amd64 golang:1.17-alpine AS builder
...
ENV CGO_ENABLED=1
ENV GOOS=linux
ENV GOARCH=amd64
...
RUN go build -tags musl --ldflags "-extldflags -static" -o main .
On the arm64 machine or container, install x86-64-linux-gnu-gcc , debian:bookworm
is what I'm using.
# apt-get install g++-x86-64-linux-gnu libc6-dev-amd64-cross
Maybe you need to install other amd64 libs on the arm64 platform
# dpkg --add-architecture amd64
# apt-get udate
# apt-get install libjpeg-dev:amd64
If you need
CGO_ENABLED=1
, forGOOS=linux
andGOARCH=amd64
, try adding--platform=linux/amd64
after yourFROM
clausese.g.
FROM --platform=linux/amd64 golang:1.17-alpine AS builder ... ENV CGO_ENABLED=1 ENV GOOS=linux ENV GOARCH=amd64 ... RUN go build -tags musl --ldflags "-extldflags -static" -o main .
this worked for me.