CMake не может найти библиотеку в докере - PullRequest
0 голосов
/ 23 июня 2019

Я использую docker для кросс-компиляции mxnet с включенным пакетом C ++ для raspberry pi 3 b.Я использую следующий файл Docker:

FROM dockcross/linux-armv7
MAINTAINER Cyrus Behroozi cyrus.behr@gmail.com

ENV DEFAULT_DOCKCROSS_IMAGE linux-armv7-rpi

# OpenCV Dependencies

RUN sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get install -y \
    build-essential \
    cmake unzip pkg-config \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libavcodec-dev \
    libavformat-dev \
    libswscale-dev \
    libv4l-dev \
    libxvidcore-dev \
    libx264-dev \
    libgtk-3-dev \
    libatlas-base-dev \
    gfortran \
    && sudo rm /usr/local/lib/libcurl.so.4 \
    && sudo ln -s /usr/lib/x86_64-linux-gnu/libcurl.so.4.3.0 /usr/local/lib/libcurl.so.4

# OpenCV Insallation

ENV OPENCV_VERSION="4.1.0"
RUN mkdir -p ~/opencv \
    && cd ~/opencv \
    && wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip \
    && unzip ${OPENCV_VERSION}.zip \
    && mkdir ~/opencv/opencv-${OPENCV_VERSION}/build \
    && cd ~/opencv/opencv-${OPENCV_VERSION}/build \
    && cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D INSTALL_C_EXAMPLES=OFF \
    -DBUILD_SHARED_LIBS=OFF \
    .. \
    && make -j8 \
    && sudo make install \
    && rm ~/opencv/${OPENCV_VERSION}.zip \
    && rm -r ~/opencv/opencv-${OPENCV_VERSION}

# mxnet requirements 

RUN  sudo apt-get -y install ninja-build \
liblapack* \
libblas* \
libopenblas* \
&& cd ~ \
&& git clone https://github.com/apache/incubator-mxnet.git --recursive \
&& cd incubator-mxnet

RUN cd ~/incubator-mxnet \
&& mkdir -p build \
&& cd build \
&& cmake \
    -DUSE_CPP_PACKAGE=1 \
        -DUSE_SSE=OFF \
        -DUSE_CUDA=OFF \
        -DUSE_OPENCV=ON \
        -DUSE_OPENMP=ON \
        -DUSE_MKL_IF_AVAILABLE=OFF \
        -DUSE_SIGNAL_HANDLER=ON \
        -DCMAKE_BUILD_TYPE=Release \
        -GNinja .. \
&& ninja -j8

Как видно, на этапе, помеченном # mxnet requirements, я устанавливаю libopenblas.Если я захожу в контейнер докера и выполняю операцию поиска, я вижу, что libopenblas действительно установлен:

$ sudo find . | grep libopenblas
./usr/share/doc/libopenblas-dev
./usr/share/doc/libopenblas-dev/copyright
./usr/share/doc/libopenblas-base
./usr/share/doc/libopenblas-base/copyright
./usr/lib/libopenblas.a
./usr/lib/libopenblas.so.0
./usr/lib/libopenblasp-r0.2.19.so
./usr/lib/libopenblas.so
./usr/lib/libopenblasp-r0.2.19.a

Однако, когда я собираю свой файл докера, я получаю следующие ошибки.Обратите внимание, что это происходит при запуске cmake в mxnet:

-- Could not find OpenBLAS include. Turning OpenBLAS_FOUND off
-- Could not find OpenBLAS lib. Turning OpenBLAS_FOUND off
CMake Error at cmake/Modules/FindOpenBLAS.cmake:82 (MESSAGE):
  Could not find OpenBLAS
Call Stack (most recent call first):
  cmake/ChooseBlas.cmake:42 (find_package)
  CMakeLists.txt:323 (include)

Я не уверен, почему он не может найти пакет, так как путь поиска (указанный в cmake/Modules/FindOpenBLAS.cmake) имеет / usr / lib в качествеПуть поиска:

SET(Open_BLAS_LIB_SEARCH_PATHS
        /lib/
        /lib/openblas-base
        /lib64/
        /usr/lib
        /usr/lib/openblas-base
        /usr/lib64
        /usr/local/lib
        /usr/local/lib64
        /opt/OpenBLAS/lib
        /usr/local/opt/openblas/lib
        ${PROJECT_SOURCE_DIR}/3rdparty/OpenBLAS/lib
        ${PROJECT_SOURCE_DIR}/thirdparty/OpenBLAS/lib
    ${OpenBLAS_DIR}
    ${OpenBLAS_DIR}/lib
        ${OpenBLAS_HOME}
        ${OpenBLAS_HOME}/lib
 )

...