Ubuntu20.04开发环境搭建
一、安装Ubuntu20.04
下载Ubuntu镜像,官网地址https://ubuntu.com/download/desktop,下载后直接在VMware15中安装。
1. 显示问题
Ubuntu镜像安装到vmware15后,没有1920x1080分辨率,但是电脑的显示器是1920*1080,无法全屏显示。
解决方法:
① 直接安装vmware-tool即可解决,安装vmware-tool后分辨率会随着窗口的大小进行调整。
② 调整系统设置,执行命令:
#自定义分辨率
cvt 1920 1080
#查看显示器名称
xrandr
可以看出我的显示器的名称是Virtual1
执行命令:
sudo xrandr --newmode "1920x1080_60.00" 173.00 1920 2048 2248 2576 1080 1083 1088 1120 -hsync +vsync
sudo xrandr --addmode Virtual1 "1920x1080_60.00"
之后就可以在显示设置中选择1920x1080分辨率,并将上面的命令加在/etc/profile
的末尾,如果重启后失效,增加一行xrandr -s 1920x1080
2. 源服务器
选择最佳服务器,或者直接选择国内的服务器,比如清华源http://mirrors.tuna.tsinghua.edu.cn/ubuntu
,在安装、更新软件的时候速度更快。
二、Ubuntu20.04上安装Qt5.12.9
1. 下载Qt安装包
使用清华大学镜像源下载:https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/5.12/5.12.9 直接下载qt-opensource-linux-x64-5.12.9.run
2. 安装Qt
切换到安装包路径,使用sudo chmod +x
命令增加安装包的权限后,直接双击安装包。安装过程选择自己需要的组件,一路Next即可。
3. 安装gcc,g++
直接使用以下命令安装
sudo apt update
sudo apt install build-essential
build-essential
是Ubuntu的一个软件包组,包括gcc、g++、make等工具
4. 安装OpenGL库
执行命令:
sudo apt-get install mesa-common-dev
缺少OpenGL库,工程编译会报错
5. 配置QtCreator
Tools→Options→Kits选择Qt版本,Compilers中选择编译器,Debuggers中选择调试器。
三、Ubuntu20.04上安装opencv3.4.9
1. 下载opencv
官网下载:https://opencv.org/releases/page/4/
国内镜像:https://www.bzblog.online/wordpress/index.php/2020/03/09/opencvdownload/
下载压缩包后直接解压出来。
2. 安装CMake
使用命令安装CMake和CMake界面
sudo apt-get install build-essential cmake
sudo apt install cmake-qt-gui
安装完成后查看CMake版本
3. 安装opencv依赖库
//安装jpeg格式图像工具包
sudo apt-get install libjpeg8-dev
//安装tif格式图像工具包
sudo apt-get install libtiff5-dev
//安装JPEG-2000图像工具包
sudo apt-get install libjasper-dev
//安装png图像工具包
sudo apt-get install libpng12-dev
//安装视频I/O包
sudo apt-get install build-essential libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
//安装gtk2.0
sudo apt-get install libgtk2.0-dev
在执行sudo apt-get install libjasper-dev
这条指令时可能会遇到libjasper-dev
包无法定位的问题,遇到这个问题后需要更新一下Linux的几个配置即可,执行如下指令:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
在执行安装视频I/O库的时候报错,按照提示执行apt --fix-broken install
即可
4. 使用CMake生成makefile
依赖全部安装完成后,在终端中进入opencv解压缩后的文件夹。然后新建一个编译的目标文件夹并进入,这里以build文件夹为例。终端执行如下指令:
mkdir build
cd build
执行CMake指令
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_TBB=ON \
-D BUILD_NEW_PYTHON_SUPPORT=ON \
-D WITH_V4L=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON ..
如果出现报错,可以双击打开CMakeCache.txt
(前提是已经安装cmake-qt-gui),使用CMake带界面工具调整各项设置,比如我在执行cmake指令的时候报错,QT5_DIR找不到,设置正确的QT5_DIR即可。
配置好QT5_DIR
后,点击“Configure”,成功后“Generate”就可以生成makefile。
5. 编译、安装opencv
在build目录下先后执行命令:
make #编译,时间比较久
sudo make install #安装
6. 系统环境配置
sudo gedit /etc/ld.so.conf.d/opencv.conf
#打开后可能是空文件,在文件内容最后添加
/usr/local/lib
执行如下命令使得刚才的配置路径生效
sudo ldconfig
配置bash,执行命令:
sudo gedit /etc/bash.bashrc
# 在末尾添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
执行如下命令使得刚才的配置bash生效
source /etc/bash.bashrc
7. 在QT中使用opencv
创建Qt Widgets Application,在.pro文件中添加opencv的头文件和库文件的路径
前面使用cmake编译时使用了勾选了生成opencv_world库,因此这里只需要包含此库即可。opencv_world包含其他所有库的功能,不需要再单独包含其他功能库,缺点是libopencv_world.so库文件比较大。
在界面中的lable上显示一张图片,代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QImage>
#include <QPixmap>
#include <opencv2/opencv.hpp>
using namespace cv;
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
,ui(new Ui::MainWindow)
{
ui->setupUi(this);
Mat img = imread("/home/wangjie/temp/opencv-logo2.png");
cvtColor(img,img,CV_BGR2RGB);
QImage image = QImage((const unsigned char *)(img.data),img.cols,img.rows
img.step,QImage::Format_RGB888);
ui->label->setPixmap(QPixmap::fromImage(image));
ui->label->resize(image.size());
ui->label->show();
}
编译后执行
至此,Qt和Opencv都在Ubuntu20.04的x64环境下安装并运行成功
四、Ubuntu20.04上交叉编译Qt、opencv
1. 交叉编译工具链
当前架构是X86_64,根据需要下载linaro版本的arm交叉编译工具链。
下载地址:http://releases.linaro.org/components/toolchain/binaries/5.5-2017.10/aarch64-linux-gnu/
解压后,将/home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin
目录加到PATH变量中,
在/etc/profile中添加新的环境变量:
sudo gedit /etc/profile
#在文件末尾添加:export PATH=$PATH:/home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin
source /etc/profile #不生效就重启系统
执行echo $PATH
查看路径是否添加成功,执行命令aarch64-linux-gnu-g++ -v
验证编译器是否安装成功
2. 交叉编译Qt5.12.9
-
下载
下载Qt源码qt-everywhere-src-5.12.9.tar.xz
Linux压缩包
源码中qt-everywhere-src-5.12.9/qtbase/mkspecs下,对应的是所有的编译平台,我们只需要修改自己需要的即可,不需要全部配置编译,找到linux-aarch64-gnu-g++
,打开qmake.conf,确认里面各项是否正确,这些工具需要和自己的交叉编译工具保持一致,否则编译失败。
-
编译
进入根目录cd qt-everywhere-src-5.12.9,执行命令:./configure \ -prefix /home/username/Qt5.12.9/5.12.9/aarch64 \ -make libs \ -xplatform linux-aarch64-gnu-g++ \ -no-opengl \ -skip qtdeclarative \ -qt-xcb
-prefix
代表你的安装文件夹
-xplatform
代表你所制定的编译器
no-opengl
跳过编译openGL(因为我已经安装了Qt,所以不需要界面)
-skip qtdeclarative
跳过 qtdeclarative(不跳过,编译出错,出错的原因不清楚)
-qt-xcb
会生成libqxcb.so,新版改为-xcb,xcb依赖库的版本一定要匹配,不然会报错
如果有别的需求,可以./configure -help查看具体命令make mkdir -p Qt5.12.9/5.12.9/aarch64 #创建安装文件夹 sudo make install
-
配置Qt,添加交叉编译环境
打开Qt-Options,查看Compilers中是否自动添加了arm版的编译器。如果没有则需要手动添加
c++编译器:gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
c编译器:gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
编译器配置成功后,在Kits中增加arm版本的平台,将刚才配置的c和c++编译器选入其中。
在Qt Versions中选择使用arm工具链编译的qmake
-
验证
创建Qt工程,选择Kit:Qt 5.12.9 aarch
编译成功后,执行file
指令查看生成文件的信息
3. 交叉编译opencv
- cmake设置
继续使用opencv3.4.9的源代码,在目录下创建build_arm
文件夹,cd到build_arm
,执行指令:
也可以使用sudo cmake -DCMAKE_C_COMPILER=aarch64-linux-gun-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gun-g++ ../
cmake-gui
命令进入cmake界面,编译更方便。界面弹出后,第一步设置源码和build路径,然后直接点击Configure
出现CMakeSetup窗口后,选择Specify options for cross-compiling
,Next
点击Finish,在Search中输入install,修改opencv编译后的安装路径#这三项一定要写对,对应工具链的位置 C: /home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc C++: /home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ Target Root: /home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin
点击Configure,出现Configuring done后,点击Generate,出现Generating done后,makefile创建成功
- 编译
执行命令make
,期间出现几个报错,记录如下
错误一:找不到zlib.h
解决方法:找到 3rdparty/libpng/CMakeLists.txt,在ocv_include_directories
前面添加set(ZLIB_INCLUDE_DIRS "/home/wangjie/Packages/opencv-3.4.9/3rdparty/zlib/")
错误二:还是找不到zlib.h的错误,但是报错的文件不同
解决方法:在顶层的CMakeLists.txt里面找到ocv_include_directories(${OPENCV_CONFIG_FILE_INCLUDE_DIR})
不一定在多少行,在这句下一行加ocv_include_directories(./3rdparty/zlib/)
错误三:未定义的引用png_do_expand_palette_rgb8_neon
png_init_filter_functions_neon
png_do_expand_palette_rgba8_neon
png_riffle_palette_neon
解决方法:
① 进入到3rdparty/libpng,在CMakeLists.txt最顶端增加:set(ENABLE_NEON ON)
,经测试此方法无效。
② 找到文件/opencv-3.4.9/3rdparty/libpng/pngpriv.h
,修改部分代码if (defined(__ARM_NEON__) || defined(__ARM_NEON)) && //修改为: if defined(PNG_ARM_NEON) && (defined(ARM_NEON) || defined(__ARM_NEON)) && \
解决以上三个问题,make
成功,继续执行sudo make install
,编译安装结束。 - 配置环境
执行如下命令使得刚才的配置路径生效sudo gedit /etc/ld.so.conf.d/opencv.conf #增加下面的路径 /usr/local/arm/lib
配置bash,执行命令:sudo ldconfig
sudo gedit /etc/bash.bashrc
执行如下命令使得刚才的配置bash生效# 在末尾添加 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig:/usr/local/arm/lib/pkgconfig export PKG_CONFIG_PATH
source /etc/bash.bashrc
五、Ubuntu20.04上安装libusb
-
apt-get
安装
执行命令:sudo apt-get install libusb-dev sudo apt-get install libusb-1.0-0-dev
libusb.h
默认安装在:/usr/include/libusb-1.0
libusb.so
默认安装在:/usr/lib/x86_64-linux-gnu
-
源代码安装
下载地址:https://github.com/libusb/libusb/releases/tag/v1.0.24
使用源码编译arm版本libusb,解压安装包,cd到源文件路径,执行命令:# 没有configure文件就先使用下面的命令创建,有就跳过 autoreconf --install ./configure --build=i686-linux \ --host=arm-linux \ --prefix=/usr/local/arm \ CC=/home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \ CXX=/home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ \ --disable-udev
其中:
–build=x86_64-linux
表示该软件在x86平台被编译
–host=arm-linux
表示该软件编译完成后在arm平台上运行
–prefix
表示该软件的安装目录
CC,CXX
等于指定了交叉编译使用的C,C++交叉编译器,需要完整路径。
如果不加最后一行--disable-udev
会出现报错:
编译安装:
make sudo make install
执行成功,查看
/usr/local/arm
目录,头文件和库文件已经生成。
六、Ubuntu20.04上安装libevent
下载libevent源码,下载地址:https://libevent.org/
- x86编译
解压压缩包libevent-2.1.11-stable.tar.gz
,执行下面的命令安装:
libevent头文件默认安装在:#创建configure ./autogen.sh #执行configure ./configure #编译、安装 make sudo make install
/usr/local/include
/usr/local/include/event2
libevent库文件默认安装在:/usr/local/lib
- 交叉编译
重新解压一份源代码,不要使用x86已经编译的过的代码继续configure
编译安装:./configure --build=i686-linux \ --host=arm-linux \ --prefix=/usr/local/arm \ CC=/home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc \ CXX=/home/wangjie/Packages/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
执行成功,查看make sudo make install
/usr/local/arm
目录,头文件和库文件已经生成。
七、Ubuntu20.04上安装Git
-
安装git
Ubuntu系统中可直接执行命令:sudo apt install git
安装完成后,查看版本
也可自行下载git源码,通过make
sudo make install
来安装,具体步骤和前面安装Qt,opencv类似,源码安装的优点是可以使用最新版的git。 -
配置git
完成安装后就可以开始配置git了,通过下面的两条命令来配置用户名和邮箱(这里的邮箱地址我用的是我的github账号下的邮箱)git config --global user.name "youname" git config --global user.email "youremail@email.com"
-
创建git仓库
创建本地git仓库,并拉取github上的代码。创建文件夹,cd进去,执行下面的命令:#创建本地仓库 git init #建立到github的远程连接 git remote add origin https://github.com/github-xxx/resp.git #拉取github上的代码,需要输入Username和Password,验证成功后开始拉取代码库 git pull https://github.com/github-xxx/resp.git