Open mihaiav opened 7 months ago
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_DoNotUseENSt7cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS3_9AttrValueELNS1_14WireFormatLite9FieldTypeE9ELSD_11E E14DeleteMapValueERKNS0_6MapKeyE[_ZN6google8protobuf8internal8MapFieldIN17opencv_tensorflow31NameAttrList_AttrEntry_DoNotUseENSt7cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS 3_9AttrValueELNS1_14WireFormatLite9FieldTypeE9ELSD_11EE14DeleteMapValueERKNS0_6MapKeyE]+0x66b): undefined reference to `google::protobuf::internal::LogMessage::operator<<(char const*)'
It not even works outside docker...
I have been doing static builds of gocv for years and it runs fine. We don't use the docker image though.
Is this a new issue in 4.9.0? Were the builds working for you before or is this your first time doing a static build?
There seems to be quite a few issues surrounding confusing failures while attempting to build a statically linked go binary that involves gocv. Is there a working example of a multistage Dockerfile that works to demonstrate this?
The docs allude to this being possible however it doesn't seem like anyone has this working properly. I'm attempting this with gocv/opencv:4.10.0-static. The goal would be to copy the single binary into a minimalistic container like chainguard/static:latest.
Alternatively is there a good example of how to ship a gocv based golang binary that's dynamically linked and copy the necessary libs into a minimal container to run? The goal here is to avoid shipping a multi gigabyte container in order to run gocv workloads on kubernetes.
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 tojust 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 togoogle::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
`
gocv.io/x/gocv v0.36.1
, vendored as well.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.