Ubuntu18.04安装Nvidia显卡驱动,CUDA+CUDNN,完整Qt,编译安装OpenCV4.1.1 with CUDA and Qt

2023-05-16

目录

  • 〇、N卡无法开机问题
  • 一、安装Nvidia显卡驱动
    • 1.禁用安全引导
    • 2.禁用默认驱动程序
    • 3.添加Nvidia驱动源
    • 4.安装驱动
  • 二、安装CUDA和CUDNN
    • 1.下载
    • 2.安装
    • 3.配置环境变量
    • 4.测试CUDA
    • 5.下载,安装CUDNN
  • 三、安装Qt和opencv所需的依赖包
  • 四、安装Qt
  • 五、安装Opencv4.1.1 with CUDA and Qt
    • 1.下载源码
    • 2.配置cmake
    • 3.编译
    • 4.验证

〇、N卡无法开机问题

如果是刚刚安装Ubuntu或使用U盘体验系统要安装Ubuntu,因为NVIDIA显卡驱动导致的卡LOGO等问题,在grub里选择Ubuntu,按e进入启动选项,在quiet splash 后面添加 nomodeset,F10保存,就可以开机了,但是只能一次有效,做完第二步就可以直接开机了。

一、安装Nvidia显卡驱动

网上方法很多,但是这个我方法在各种电脑上都试过(甚至是工作站的Quadro显卡,Ubuntu18.04 Server系统上)没出现过任何问题。

1.禁用安全引导

UEFI的安全引导会阻止第三方驱动运行,导致无法安装驱动,所以需要禁用,禁用方法是进入BIOS,找到boot选项卡中的Secure Boot选项,设置为Disable,保存重启即可。

2.禁用默认驱动程序

sudo vi /etc/modprobe.d/blacklist.conf

在最后面添加以下内容

blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist rivatv
blacklist nvidiafb

更新内核后重启

sudo update-initramfs -u

验证默认驱动是否成功屏蔽

lsmod | grep nouveau

若成功应该没有任何输出

3.添加Nvidia驱动源

如果网络原因导致下载缓慢,可以先更换apt源

sudo apt edit-sources

选择编辑器,然后将原先内容注释或者直接删除更换为新的国内源

#阿里源
deb http://mirrors.aliyun.com/ubuntu/ xenial main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main multiverse restricted universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main multiverse restricted universe
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main multiverse restricted universe

添加Nvidia驱动源

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

4.安装驱动

查询合适的驱动

ubuntu-drivers devices

稍等片刻就会出现一些提示(我的显卡是1050Ti移动版)

== /sys/devices/pci0000:00/0000:00:01.0/0000:01:00.0 ==
modalias : pci:v000010DEd00001C8Csv0000103Csd00008478bc03sc00i00
vendor   : NVIDIA Corporation
model    : GP107M [GeForce GTX 1050 Ti Mobile]
driver   : nvidia-driver-410 - third-party free
driver   : nvidia-driver-390 - distro non-free
driver   : nvidia-driver-415 - third-party free
driver   : nvidia-driver-435 - distro non-free
driver   : nvidia-driver-440 - distro non-free recommended
driver   : xserver-xorg-video-nouveau - distro free builtin

== /sys/devices/pci0000:00/0000:00:14.3 ==
modalias : pci:v00008086d0000A370sv00008086sd00000034bc02sc80i00
vendor   : Intel Corporation
manual_install: True
driver   : backport-iwlwifi-dkms - distro free

选择带有recommended的版本的显卡驱动(我的是nvidia-driver-440)然后安装

sudo apt install nvidia-driver-440

重启后使用nvidia-smi查看显卡状态如果出现类似输出,并正确识别显卡型号,显存有占用就说明安装成功
在这里插入图片描述

二、安装CUDA和CUDNN

1.下载

在此选择需要的版本的CUDA下载
版本选择完后会引导到选择选择目标平台页面,这里选Linux x86_64 Ubuntu runfile(local)
如果有补丁,一起下载,先安装基础的再安装补丁包,补丁包过程类似

2.安装

运行安装程序

sudo sh xxxxxxx.run

看着英语提示安装,因为各个版本的CUDA安装步骤不太一样,关键是一定不要安装显卡驱动,因为已经装过了,再装会出错,其他的选项都是yes或者默认就行。

3.配置环境变量

将以下内容复制到/etc/bash.bashrc的末尾,这里是添加到系统环境变量里面了

export CUDA_HOME=/usr/local/cuda 
export PATH=$PATH:$CUDA_HOME/bin 
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

然后更新环境变量

source /etc/bash.bashrc

4.测试CUDA

可以使用自带例程确认CUDA安装成功

cd /usr/local/cuda/samples/1_Utilities/deviceQuery 
sudo make
./deviceQuery

如果上面输出一堆你的显卡的信息,最后一个惹人爱的PASS就说明成功了

5.下载,安装CUDNN

在此下载CUDNN
比较烦人的是CUDNN需要英伟达开发者账号才能下载,可以使用普通的英伟达账号登录,选择Login with your social account >看着来,下载和CUDA版本对应的CUDNN,看不懂就网页翻译。
下载完之后解压,进入包含cuda文件夹的那一级文件夹,执行下面四行就安装完成了(如果你的cuda是默认安装路径的话)

sudo cp cuda/include/cudnn.h /usr/local/cuda/include/ 
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ 
sudo chmod a+r /usr/local/cuda/include/cudnn.h 
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

查看CUDNN版本确认一下

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

出现一段C语言代码,算出CUDNN_VERSION的值就是CUDNN的版本。

三、安装Qt和opencv所需的依赖包

里面还包含一些实用工具像htop之类的,相信基本上是必备,已经安装的也不用去掉

sudo apt-get install -y \
    git \
    vim \
    htop \
    cmake \
    cmake-gui \
    screen \
    libavcodec-dev \
    libavformat-dev \
    libavutil-dev \
    libeigen3-dev \
    libglew-dev \
    libgtk2.0-dev \
    libgtk-3-dev \
    libjpeg-dev \
    libpostproc-dev \
    libswscale-dev \
    libtbb-dev \
    libtiff5-dev \
    libv4l-dev \
    libxvidcore-dev \
    libx264-dev \
    zlib1g-dev \
    pkg-config \
    libxcb*

如果想在Python3上使用,安装numpy,numpy需要Cython

sudo -H pip3 install Cython -i https://pypi.tuna.tsinghua.edu.cn/simple
sudo -H pip3 install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

四、安装Qt

x86平台安装Qt是非常方便的,可以在Qt官网下载安装器,安装编译好的程序包,就是同样要注册账号
Qt账号注册
开源版Qt在线安装器下载
下载完使用权限运行安装器(不用权限无法安装到/usr/locat里面)
next会提示登录,如果账号没有许可证,自动是安装开源版
同意开源许可并等待检索仓库后就能看到各种版本了
安装目录更改到/usr/local/Qt
然后选择一个版本的Qt,选择其中的Desktop gcc 64-bit打钩,其他的不用更改然后下一步,等待就完成了。

五、安装Opencv4.1.1 with CUDA and Qt

1.下载源码

源码包 / 拓展包
CUDA支持和很多高级功能是在拓展库里的,所以都要下载,下载完解压到主目录下,两个文件夹挨着放,在opencv-4.1.1里新建一个build文件夹,存放编译缓存。

2.配置cmake

进入build文件夹,执行sudo cmake-gui,使用图形化配置
第一行地址栏定位到opencv-4.1.1文件夹,下一个定位到opencv-4.1.1/build,先Configure一遍,读取配置,然后开始配置

  1. 搜索CMAKE_INSTALL_PREFIX,安装位置,推荐默认位置/usr/local,这样就不用另外配置库路径了
  2. 搜索OPENCV_EXTRA_MODULES_PATH,定位到opencv_contrib-4.1.1/modules
  3. 搜索CMAKE_BUILD_TYPE,填Realease
  4. 搜索OPENCV_GENERATE_PKGCONFIG,打勾,否则pkg-config不管用
  5. 再Configure一遍,读取拓展包配置
  6. 搜索CUDA,全打勾
  7. 搜索WITH_QT,WITH_QT打勾
  8. 搜索WITH_OPENGL,WITH_OPENGL打勾
  9. 如果需要Python3,搜索BUILD_opencv_python3,打勾
  10. 再Configure一遍,读取模块配置
  11. 搜索Qt,确认Qt路径指向的是新安装的版本(不知道版本可以再Configure一遍,从配置输出的GUI选项中找到版本)如果完全按照我之前的方法安装,Qt5_DIR的路径应该是/usr/local/Qt/5.14.0/gcc_64/lib/cmake/Qt5其他的以此类推
  12. 再次搜索CUDA,全打勾,重新配置的过程中会有新的选项出现,例如CUDA_FAST_MATH(千万不要选WITH_NVCUVID否则绝对编译失败)
  13. 清空搜索再Configure,直到没有红色选项,检查最后的配置输出,确认没有问题
  14. Generate 生成Makefile

肯定会出现的问题:

  • 卡在IPPICV下载
    手动下载IPPICV对应版本然后修改opencv-4.1.1/3rdparty/ippicv/ippicv.cmake第47行那个网址为本地网址,例如file:///home/xxxx/Downloads/,指向下载的IPPICV所在文件夹,最后的/不能少,如果成功了,在配置输出的Other third-party libraries选项里会有IPP的版本
  • 卡在face_landmark_model.dat下载
    手动下载然后和上面一样修改opencv_contrib-4.1.1/modules/face/CMakeLists.txt
  • 卡在boostdesc或vgg_generated下载
    等着或者重试就好了这个就是费劲,但是能下,前面的两个是真的下不来

可能出现的问题:

  • 编译时dynlink_nvcuvid.h问题
    如果cuda使用的是10.0版本,并且在后面的编译过程中出现dynlink_nvcuvid.h找不到的错误,下载video_sdk,将里面的cuviddec.h 和nvcuvid.h拷贝到/usr/local/cuda-10.0/include/目录下,将nvcuvid.h 重命名为dynlink_nvcuvid.h,重新编译即可。

3.编译

在build文件夹下执行sudo make,可以开多线程编译-j8,具体多少线程看机器CPU核数和内存够不够。编译完成且没有错误执行sudo make install -j4,过程不长,可以不用开多线程,随便啦

4.验证

查看引用目录和库,输出较不带拓展库的OpenCV多了很多,如果这个生效不出意外就没问题了,程序测试就自己写去了

pkg-config opencv4 --cflags --libs

pkg-config

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18.04安装Nvidia显卡驱动,CUDA+CUDNN,完整Qt,编译安装OpenCV4.1.1 with CUDA and Qt 的相关文章

  • STL几个容器的比较

    vector xff1a 连续内存 xff0c 随机访问数据成员快 xff0c 但是频繁的插入 xff08 需要移动要插入的元素的后面的所有元素 xff09 或者扩容 vector扩容后会清掉原来的数据 xff0c 拷贝到新的申请的大的内存
  • STL注意问题

    1 由于继承的存在 xff0c 拷贝会导致分割 那就是说 xff0c 如果你以基类对象建立一个容器 xff0c 而你试图插入派生类对象 xff0c 那么当对象 xff08 通过基类的拷贝构造函数 xff09 拷入容器的时候对象的派生部分会被
  • CAN总线通信协议详讲

    CAN简介 CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986 年率先提出 此后 xff0c CAN 通过IS
  • gazebo仿真——controller配置(transmission/hardwareInterface标签)

    参考roswiki controller官方说明 本文作为古月大神的补充ROS探索总结 xff08 三十一 xff09 ros control 为了在gazebo中实现机器人关节的控制 xff0c 需要求建立一个controller控制器
  • NDK--CMakeLists配置第三方so库

    当我们创建一个NDK工程时 xff0c 会自动创建一个CMakeLists txt的文件 xff0c 在AS中c 43 43 的编译器是使用LLVM xff0c 规则为cmake xff0c 今天来学习下cmake的基本套路 首先 xff0
  • postman插件下载安装教程(详细)

    一 前言 postman是一款强大网页接口调试工具 xff0c 我们在平时开发过程中经常会使用到 xff0c 一般使用最多的是postman的客户端 xff0c 实际上postman在谷歌浏览器上也提供了插件 xff0c 可以不必要安装客户
  • CMake交叉编译简单教程

    首先要安装cmaek 然后安装交叉编译链 一 CMake简介 xff1a CMake是一个跨平台的安装 编译 工具 可以通过简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的 makefile 或者 project 文件 二 C
  • 锂电池的常见接口

    我们在做一些小型化便携式设备的时候 xff0c 经常会用到锂电池 xff0c 常见的锂电池接口如图 xff1a
  • Ubuntu14.04_ROS学习笔记(7) odroid板上操作系统和电脑端主从连接

    4 29日 xff0c 距离上次写过于odroid ROS的博客已经过去近4周 xff0c 在这四周发生了很多曲折事 xff0c 研究生的调剂和面试问题 xff0c 导师双向选择也出现了问题 xff0c 调档问题 xff0c 然后和GF出去
  • ROS学习----Publisher与Subscriber

    1 Publisher 发布者 与subscriber 订阅者 关系 Publisher的主要作用是对于指定话题发布特定数据类型的消息 下面是利用代码实现一个节点 xff0c 节点创建一个Publisher并发布字符串 Hello worl
  • liunx 下如何查看make与cmake版本

    cmake cmake version 即可查看cmake的版本 make 如果是在 shell 中查看 xff0c 那么直接 make v 即可 如果是在 makefile 中获取 xff0c 则用 MAKE VERSION xff0c
  • CAN协议解析

    CAN协议解析 CAN 总线组网连线图CAN的报文格式报文格式扩展CAN错误检测 波形解析ID数据长度数据字段CRC CAN 总线组网连线图 根据CAN总线的硬件特性 xff0c 当一条CAN总线上挂接多个驱动器的时候 xff0c 应当按照
  • 字节序的大端和小端

    字节序 字节序 xff08 Byte Order xff09 是指在多字节的数据类型 xff08 如整型 浮点型等 xff09 在内存中存储时 xff0c 字节的排列顺序 大端字节序 xff08 Big Endian xff09 xff1a
  • STM32 HAL 串口收发(无DMA,中断接收)

    STM32CUBE配置 一 使用printf发送数据 xff0c 在usart c中添加代码串口重定向 USER CODE BEGIN 0 include lt stdio h gt ifdef GNUC define PUTCHAR PR
  • 2019年电赛综合测评题详解

    2019年全国大学生电子设计竞赛综合测评已经结束 xff0c 邀请到西电研究生李天红同学给大家做重点分析 首先看题目 xff1a 视频要点提示 xff1a 题目分析 常用波形变换电路 两种可行方案 方案仿真 实际过程中遇到的问题分析 完整视
  • 《Spring源码深度解析 郝佳 第2版》SpringBoot体系分析、Starter的原理

    往期博客 Spring源码深度解析 郝佳 第2版 容器的基本实现与XML文件的加载 Spring源码深度解析 郝佳 第2版 XML标签的解析 Spring源码深度解析 郝佳 第2版 bean的加载 循环依赖的解决 Spring源码深度解析
  • SpringCloud Alibaba Nacos实践与原理分析

    目录 一 Nacos概述 Nacos是什么 xff1f Nacos中的相关概念 二 微服务的注册与发现 Nacos client提供注册接口的原理 服务注册的原理分析服务注册的时机分析NacosServiceRegistryAutoConf
  • Linux课堂篇3_Linux目录结构、快捷键、常用基础命令

    目录 此系列博客为大三下期末小学期课程大数据疫情分析平台项目学习学习笔记 xff0c 内容参考中共教育讲义文件 Linux目录结构Linux快捷键Linux命令 命令分类快捷键基本命令常用命令用户管理命令文件权限命令磁盘大小查看命令搜索查找
  • 《深入理解RPC框架原理与实现 华钟明》读书笔记

    前言 这本书更像是全面系统的讲解RPC xff0c 内容可以连贯起来 xff0c 从计算机处理器发展到RPC的诞生 xff0c 后面讲几种常见的RPC组件 通信协议 序列化协议 xff0c 虽然内容不是很深入 xff0c 但是对于小白较易理
  • Nebula Graph学习篇1_基础概念、初步使用、整合SpringBoot使用

    目录 一 基础概念 图数据库的概念适用场景数据模型路径点的VID架构 二 初步使用 Windows安装Nebula Graph服务Nebula Console 连接 Nebula Graph常用命令 3 1异步实现创建修改类型 xff08

随机推荐