gocv
gocv copied to clipboard
building a static binary with ` gocv/opencv:4.9.0-static` fails
Building a Go app with gocv/opencv:4.9.0-static docker image fails.
Description
I'm trying to build a static go binary using gocv/opencv:4.9.0-static
as base. Unfortunately the go build command fails. Is this a known bug? Does it require an additional configuration to make it compile? Given gocv is already shipped in the docker image I expected it to just work
.
Steps to Reproduce
I'm a Dockerfile to build the app and later run it as part of a web service. The docker file is pretty simple. Here is a bit more reduced:
FROM gocv/opencv:4.9.0-static as golang ... RUN go build -ldflags="-extldflags=-static" -o main
It throws a bunch of errors such below. log.txt
/usr/local/go/pkg/tool/linux_amd64/link: running g++ failed: exit status 1
/usr/bin/ld: /tmp/go-link-1938547386/000056.o: in function mygetgrouplist': /usr/bin/ld: /usr/local/lib/libopencv_dnn.a(types.pb.cc.o): in function
_GLOBAL__sub_I.00102_types.pb.cc':
types.pb.cc:(.text.startup._GLOBAL__sub_I.00102_types.pb.cc+0xf): undefined reference to google::protobuf::internal::AddDescriptorsRunner::AddDescriptorsRunner(google::protobuf::internal::DescriptorTable const*)' /usr/bin/ld: $WORK/b001/exe/a.out: hidden symbol
opj_read_header' isn't defined
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
`
Your Environment
`
- Operating System and version: Google cloud run E2 standard 4 (4 vcpu, 16 gb ram) * OpenCV version used: Docker repo gocv/opencv:4.9.0-static
- How did you install OpenCV? I've got it preinstalled using the docker repo : gocv/opencv:4.9.0-static
- GoCV version used:
I use go modules with
gocv.io/x/gocv v0.36.1
, vendored as well. - Go version: docker based gocv/opencv:4.9.0-static which I believe has Go go1.22.0
- Did you run the
env.sh
orenv.cmd
script before trying togo run
orgo build
? Yes, it saidThis script is no longer necessary and has been deprecated. See the Custom Environment section of the README if you need to customize your environment.
It happened to me too, I compiled and installed a static version of opencv and it also reported a bunch of errors when compiling.
I've taken a random snippet of the error:
C:/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libopencv_dnn490.a(attr_value.pb.cc.obj):attr_value.pb.cc:(.text$_ZN6google8protobuf8i nternal8MapFieldIN17opencv_tensorflow31NameAttrList_AttrEntry_DoNotUseENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS3_9AttrValueELNS1_14WireFormatLite9FieldTypeE9ELSD_11E E14DeleteMapValueERKNS0_6MapKeyE[_ZN6google8protobuf8internal8MapFieldIN17opencv_tensorflow31NameAttrList_AttrEntry_DoNotUseENSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS 3_9AttrValueELNS1_14WireFormatLite9FieldTypeE9ELSD_11EE14DeleteMapValueERKNS0_6MapKeyE]+0x66b): undefined reference to `google::protobuf::internal::LogMessage::operator<<(char const*)'