Nvidia-docker - 在构建过程中找不到 libnvcuvid.so

Nvidia-docker - cant find libnvcuvid.so on building process

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

如果构建命令在 Docker 文件上,它会显示此错误:

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

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

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

这是我为消除其他错误所做的一些 'hacks':

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

我在最新版本上使用 nvidia cuda 8 图像 + nvidia docker,Docker 版本 17.03.1-ce。

我认为Docker文件编译过程和容器运行时没有任何区别。

图像 nvidia/cuda 没有按照我的软件构建方案要求的方式 nvidia drivers 提供,因此我必须安装与 nividia-smi 输出显示的等效的驱动器。

apt-get install -y nvidia-381

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

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

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