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