我有一个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开始编译过程,编译过程就会成功。
因此,编译似乎只有在它是坞构建的一部分时才会失败。
有没有人知道有关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发布于 2022-09-29 07:40:28
经过一番调查,我终于偶然发现了一张票:https://gitlab.archlinux.org/archlinux/archlinux-docker/-/issues/32
这些评论给了我一个想法,即内核可能是问题所在。我对内核进行了升级,这似乎解决了问题。
希望这能对未来的其他人有所帮助。
https://stackoverflow.com/questions/73740928
复制相似问题