hybridgroup / gocv

Go package for computer vision using OpenCV 4 and beyond. Includes support for DNN, CUDA, and OpenCV Contrib.
https://gocv.io
Other
6.42k stars 853 forks source link

building a static binary with ` gocv/opencv:4.9.0-static` fails #1169

Open mihaiav opened 2 months ago

mihaiav commented 2 months ago

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 symbolopj_read_header' isn't defined /usr/bin/ld: final link failed: bad value collect2: error: ld returned 1 exit status `

Your Environment

`

lujihong commented 1 month 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*)'

neilyoung commented 1 month ago

It not even works outside docker...

ansoni-san commented 1 week ago

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?