我编写了一个构建我的QT应用程序的Dockerfile,我在构建时遇到了一些问题。
如果构建命令在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编译过程和容器运行时没有任何区别。
答案 0 :(得分:1)
图片nvidia/cuda
没有nvidia drivers
我的软件构建方案所需的方式,所以我必须安装相当于nividia-smi
输出显示的驱动器。< / p>
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