我写了一个构建QT应用程序的Dockerfile,但是在构建过程中遇到了一些问题。
如果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
我添加了一个符号链接(symbolic link),该符号链接(symbolic 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
这是我为删除其他错误所做的一些“黑客”操作:
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编译过程和容器运行时之间没有任何区别。
最佳答案
镜像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
关于docker - Nvidia-docker-在构建过程中找不到libnvcuvid.so,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44131890/