【问题标题】:docker buildkit opencv compilationdocker buildkit opencv 编译
【发布时间】:2022-09-29 15:40:28
【问题描述】:

我有一个 Dockerfile 可以编译 opencv 很长一段时间。最近我决定尝试 buildkit(用于交叉编译)。但是,使用 buildkit 时,opencv 编译会失败。出现以下错误:

#9 130.0 [ 87%] Linking CXX shared library ../../lib/libopencv_imgcodecs.so
#9 130.5 [ 87%] Built target opencv_imgcodecs
#9 130.5 [ 87%] Generating src/moc_window_QT.cpp
#9 130.5 [ 87%] Generating qrc_window_QT.cpp
#9 130.5 standard input:0: Note: No relevant classes found. No output generated.
#9 130.5 RCC: Error in \'/opencv/modules/highgui/src/window_QT.qrc\': Cannot find file \'files_Qt/Milky/48/28.png\'
#9 130.5 make[2]: *** [modules/highgui/CMakeFiles/opencv_highgui.dir/build.make:78: modules/highgui/qrc_window_QT.cpp] Error 1
#9 130.5 make[1]: *** [CMakeFiles/Makefile2:1684: modules/highgui/CMakeFiles/opencv_highgui.dir/all] Error 2
#9 130.5 make: *** [Makefile:163: all] Error 2

我尝试在git clone 之后停止构建,以查看文件files_Qt/Milky/48/28.png 是否存在于容器中并且确实存在。此外,如果我从容器中的交互式 shell 启动编译过程,则编译过程成功。

所以似乎只有当它是 docker build 的一部分时编译才会失败。

有人知道有关 buildkit 如何工作的更多详细信息,以及这是否会对编译过程产生影响吗?

这是构建命令和 Dockerfile 的最小示例:

DOCKER_BUILDKIT=1 docker build --no-cache --progress=plain -t \"buildkit_error:latest\" -f Dockerfile .
FROM ubuntu:20.04

WORKDIR /

# Setup apt repositories
RUN \\
  apt update && \\
  apt install -y --no-install-recommends \\
      wget \\
      software-properties-common && \\
  add-apt-repository ppa:deadsnakes/ppa && \\
  apt install -y --fix-broken && \\
  apt update && \\
  apt upgrade -y && \\
  apt dist-upgrade -y && \\
  apt remove -y python3 && \\
  apt clean && \\
  apt autoremove -y && \\
  apt autoclean -y

# Install apt packages
# ORDER ALPHABETICALLY!
RUN \\
  apt install -y --no-install-recommends \\
      build-essential \\
      clang-10 \\
      cmake \\
      cpio \\
      git \\
      libdrm-dev \\
      libcairo2-dev \\
      libomp-10-dev \\
      llvm-10-dev \\
      openssh-client \\
      pkg-config \\
      python3.6-dev \\
      python3.6-distutils\\
      python3.6-minimal \\
      python3-pip \\
      qt5-default

# Install pip dependencies
# ORDER ALPHABETICALLY!
RUN python3.6 -m pip install --no-cache-dir \\
  numpy==1.16.1 \\
  setuptools==59.6.0 \\
  wheel==0.37.1

RUN \\
    ln -sf /usr/bin/python3.6 /usr/bin/python3 && \\
    ln -sf /usr/bin/python3 /usr/bin/python

ENV opencv=3.4.3
RUN git clone --branch $opencv --depth 1 https://github.com/opencv/opencv.git

RUN ls -al /opencv/modules/highgui/src/files_Qt/Milky/48

# build opencv from source
RUN \\
  mkdir opencv/build && cd opencv/build && cmake -DBUILD_TIFF=ON \\
  -DCMAKE_C_COMPILER=clang-10 \\
  -DCMAKE_CXX_COMPILER=clang++-10 \\
  -DENABLE_FAST_MATH=ON \\
  -DCMAKE_BUILD_TYPE=Release \\
  -DBUILD_opencv_java=OFF \\
  -DWITH_CUDA=OFF \\
  -DENABLE_CXX11=ON \\
  -DWITH_OPENGL=ON \\
  -DWITH_OPENCL=ON \\
  -DWITH_IPP=ON \\
  -DWITH_TBB=ON \\
  -DWITH_EIGEN=ON \\
  -DWITH_V4L=OFF \\
  -DWITH_GTK=ON \\
  -DWITH_GTK_2_X=ON \\
  -DBUILD_PERF_TESTS=OFF \\
  -DBUILD_opencv_apps=OFF \\
  -DBUILD_JAVA=OFF \\
  -DBUILD_PROTOBUF=OFF \\
  -DBUILD_PACKAGE=OFF \\
  -DBUILD_TESTS=OFF \\
  -DBUILD_opencv=OFF \\
  -DBUILD_opencv_dnn=OFF \\
  -DBUILD_opencv_java_bindings_generator=OFF \\
  -DBUILD_opencv_shape=OFF \\
  -DBUILD_opencv_stitching=OFF \\
  -DBUILD_opencv_superres=OFF \\
  -DBUILD_opencv_ts=OFF \\
  -DBUILD_opencv_video=OFF \\
  -DBUILD_opencv_videoio=OFF \\
  -DBUILD_opencv_videostab=OFF \\
  -DBUILD_opencv_world=OFF \\
  -DBUILD_opencv_ml=OFF \\
  -DBUILD_opencv_photo=OFF \\
  -DWITH_1394=OFF \\
  -DWITH_FFMPEG=OFF \\
  -DWITH_GSTREAMER=OFF \\
  -DWITH_IMGCODEC_HDR=OFF \\
  -DWITH_IMGCODEC_PXM=OFF \\
  -DWITH_IMGCODEC_SUNRASTER=OFF \\
  -DWITH_JASPER=OFF \\
  -DWITH_OPENCVAMDBLAS=OFF \\
  -DWITH_OPENCVAMDFFT=OFF \\
  -DWITH_OPENEXR=OFF \\
  -DWITH_OPENNI=OFF \\
  -DWITH_OPENNI2=OFF \\
  -DWITH_OPENVX=OFF \\
  -DWITH_VTK=OFF \\
  -DWITH_V4L=OFF \\
  -DWITH_QUIRC=OFF \\
  -DWITH_QT=ON \\
  -DBUILD_opencv_calib3d=ON \\
  -DBUILD_opencv_core=ON \\
  -DBUILD_opencv_python3=ON \\
  -DBUILD_opencv_flann=ON \\
  -DBUILD_opencv_python_binding_generator=ON \\
  -DBUILD_opencv_highgui=ON \\
  -DBUILD_opencv_imgcodecs=ON \\
  -DBUILD_opencv_features2d=ON \\
  -DBUILD_opencv_imgproc=ON \\
  -DWITH_OPENMP=ON \\
  -DWITH_PNG=ON \\
  -DWITH_HALIDE=OFF .. && \\
  make -j6 && make install

    标签: docker opencv docker-buildkit


    【解决方案1】:

    经过一番调查,我终于偶然发现了这张票: https://gitlab.archlinux.org/archlinux/archlinux-docker/-/issues/32

    cmets 让我认为内核可能是问题所在。我升级了内核,似乎已经解决了这个问题。

    希望这对将来的其他人有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-11-17
      • 1970-01-01
      • 2021-10-22
      • 2019-12-02
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 2013-11-15
      • 2020-08-26
      相关资源
      最近更新 更多