0

我编写了一个 Dockerfile 来构建我的 QT 应用程序,但我在构建时遇到了一些问题。

如果 build 命令在 Dockerfile 上,则会出现以下错误:

ninja: error: '/usr/lib/x86_64-linux-gnu/libnvcuvid.so', needed by 'bin/x64/release/*****/librtmpPlugin.so', missing and no known rule to make it

我添加了一个符号链接来解决临时容器上的这个错误:

ln -s /usr/local/nvidia/lib64/libnvcuvid.so.1 /usr/lib/x86_64-linux-gnu/libnvcuvid.so

但是当我添加该行并再次构建时,我仍然遇到同样的错误。

首先我认为这是因为悬挂图像的一些缓存但清理所有问题仍然存在。

这是我的一些 ENV 键:

ENV LD_LIBRARY_PATH /usr/local/nvidia/lib:/usr/local/nvidia/lib64
ENV LIBRARY_PATH /usr/local/cuda/lib64/stubs:${LIBRARY_PATH}
ENV PATH /usr/local/nvidia/bin:/usr/local/cuda/bin:${PATH}
ENV OPENCL_HEADERS /usr/local/cuda/include
ENV LIBOPENCL /usr/local/cuda/lib64
ENV CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda
ENV CUDA_NVCC_EXECUTABLE /usr/bin/nvcc

这是我为消除其他错误所做的一些“技巧”:

RUN mv /usr/lib/x86_64-linux-gnu/libOpenCL.so.1 /usr/lib/x86_64-inux-gnu/libOpenCL.so.1_old
RUN ln -s /usr/local/cuda/lib64/libOpenCL.so.1 /usr/lib/x86_64-linux-gnu/libOpenCL.so.1
RUN ln -s /usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so
RUN ln -s /usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libnvidia-ml.so /usr/lib/x86_64-linux-gnu/libnvidia-ml.so

我在最后一个版本 Docker 版本 17.03.1-ce 上使用 nvidia cuda 8 image + nvidia docker。

我认为 Dockerfile 编译过程和容器运行时之间没有任何区别。

4

1 回答 1

2

该图像nvidia/cuda不符合nvidia drivers我的软件构建方案所需的方式,因此我必须安装与nividia-smi输出显示等效的驱动器。

apt-get install -y nvidia-381

我知道我将来可能会遇到一些问题,但这是你现在要走的路。

我还不得不重命名,libcuda.so因为 nvidia-381 包有很多依赖项并libcuda.so从 CUDA 包中删除了,我开始收到很多警告。

RUN mv /usr/lib/x86_64-linux-gnu/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so_old
RUN ln -s /usr/local/cuda-8.0/targets/x86_64-linux/lib/stubs/libcuda.so /usr/lib/x86_64-linux-gnu/libcuda.so
于 2017-05-24T09:57:16.170 回答