denismakogon/gocv-alpine

error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

zak905 opened this issue · 2 comments

When running my go binary with this image (denismakogon/gocv-alpine:3.4.2-runtime) , I get this error:

error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

My other go binaries are running fine on alpine without the opencv.

I got it to work using denismakogon/gocv-alpine:3.4.2-buildstage image, but the image is very large ( 1.3 GB), what makes the difference between runtime (about 218 MB) and buildstage so big ?

I got it to work after copying some parts of runtime dockerfile into my dockerfile:

FROM denismakogon/gocv-alpine:3.4.2-buildstage as build-stage
FROM denismakogon/ffmpeg-alpine:4.0



# OpenCV 3.4.1 shared objects from build-stage
COPY --from=build-stage /usr/local/lib64 /usr/local/lib64
COPY --from=build-stage /usr/local/lib64/pkgconfig/opencv.pc /usr/local/lib64/pkgconfig/opencv.pc
COPY --from=build-stage /usr/local/include/opencv /usr/local/include/opencv
COPY --from=build-stage /usr/local/include/opencv2 /usr/local/include/opencv2

ENV PKG="libstdc++ \
         ca-certificates \
         wget \
         libjpeg-turbo \
         libpng \
         libwebp \
         libwebp-dev \
         tiff \
         jasper-libs \
         libavc1394 \
         jasper-libs \
         openblas \
         libgphoto2 \
         gstreamer \
         gst-plugins-base "

RUN apk update && \
    apk upgrade && \
    apk add --no-cache ${PKG}

ENV PKG_CONFIG_PATH /usr/local/lib64/pkgconfig
ENV LD_LIBRARY_PATH /usr/local/lib64
ENV CGO_CPPFLAGS -I/usr/local/include
ENV CGO_CXXFLAGS "--std=c++1z"
ENV CGO_LDFLAGS "-L/usr/local/lib -lopencv_core -lopencv_face -lopencv_videoio -lopencv_imgproc -lopencv_highgui -lopencv_imgcodecs -lopencv_objdetect -lopencv_features2d -lopencv_video -lopencv_dnn -lopencv_xfeatures2d -lopencv_plot -lopencv_tracking"

The only thing that was causing issues is glibc which has compatibility issues with libc6-compat package which required for running go binaries in alpine (https://stackoverflow.com/questions/36279253/go-compiled-binary-wont-run-in-an-alpine-docker-container-on-ubuntu-host/50861580#50861580). Hope this helps somebody someday.