Nvidia的docker – 不能findlibnvcuvid.sobuild设过程

我写了一个Dockerfile来构build我的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 

但是,当我添加该行,并再次build立,我仍然有同样的错误。

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

这是我的一些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映像+ nvidia docker。

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

nvidia/cuda的图像没有像我的软件构buildscheme所要求的那样与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