Ubuntu下的基本知识点(二)

2023-05-16

接着前面一篇博客的内容,继续做验证性实验。

1. 这里换种方式,不同于我前面博客,这里使用cmake-gui方式编译opencv。

(1)由于想要WITH_QT编译,所以这里先安装下QT库

Ubuntu16.04系统下静态库.a和动态库.so文件的生成及使用_boomboomy的博客-CSDN博客

Linux中./configure和cmake的区别是什么? - 知乎

不同于前面的博客,博主这次采用源码安装方式来安装qt, 网址 下载qt源码,博主解压缩到了home目录下

 首先在终端下执行命令,安装一些必要库

sudo aptitude build-dep qt5-default

注意如下命令,博主实验下来的必须使用

sudo apt install libxcb*-dev libx11-xcb-dev

然后可以打开目录下的README文件,查看需要的前提配置需求,根据此准备好即可。博主在目录下新建了一个build文件夹(这样编译的文件都在此文件夹下,便于管理),一个install文件夹。 cd到build目录下执行如下命令,将qt安装到如下目录下(/home/sxhlvye/qt-everywhere-src-5.15.2/install)

../configure -prefix /home/sxhlvye/qt-everywhere-src-5.15.2/install -opensource

可以看到build目录下已经生成了makefile文件

同时也看到这个目录( /home/sxhlvye/qt-everywhere-src-5.15.2)下并没有cmakefiles文件,只有./configure文件,待上面configure命令完毕后,再输入 sudo make -j4,耐心等待完成

最后执行make install,可以看到install目录下有如下文件夹

这是install\plugins\platforms下的文件内容

添加如下环境变量(在~/.bashrc中加入)

 可看到生效语句使用后,系统能找到qmake了

同时也验证了whereis只能在系统的环境配置目录下去找某个库,若放到别的位置也找不到。

下面用命令行方式编译一个简单的qt程序

博主在如上目录结构下创建一个helloqt.cpp文件,文件中代码如下:

#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>

int main(int argc,char **argv)
{
    QApplication a(argc,argv);
    QLabel label(QLabel::tr("Helle Qt!"));
    label.show();

    return a.exec();
}

命令行cd到helloqt.cpp所在目录下,分别执行如下命令语句:

qmake -project

修改生成的test_qt.pro为如下(添加了一条QT += widgets语句):

再执行

qmake test_qt.pro

最后再执行

make

运行可执行文件,可以看到如下窗口

sudo ./test_qt

这里说明一下,如果前面没有提前安装说明的库libxcb*-dev,libx11-xcb-dev,到这一步时会报如下错误:

qt.qpa.plugin: Could not find the Qt platform plugin "xcb" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, webgl.

Aborted (core dumped)

同时也可以看到不提前安装libxcb*-dev,libx11-xcb-dev,install\plugins\platforms下的文件内容是这样的,缺少了一个libqxcb.so库

ubuntu 18.04 - QT "Could not find the Qt platform plugin "xcb" " - Stack Overflow

ubuntu下QT版本切换_dzhongjie的博客-CSDN博客_ubuntu切换qt版本

ubuntu16.04下qt4和qt5同时安装的切换_lch_vision的博客-CSDN博客_qt4和qt5可以一起安装吗

(2)下面开始进入opencv的 带WITH_QT源码编译过程。

 通过cmake-gui来进行编译,这里不多细讲,参见我前面博客,只是在这篇博客中当时用的是交叉编译器,但方式类似。这里我选择编译的是动态链接库,且WITH_QT勾选上了,配置路径就用上了前面刚源码编译好的qt库 

还是那些方法,sudu make -j4, make install.完毕后,在~/.bashrc中加入了pkg-config的目录

前面博客 中提到pkg-config是个好东西,这里看下上面pkgconfig目录下是什么文件,原本是opencv.pc,这里被我重新命名为了opencv_share.pc(这次编译采用的是动态编译,后面博主还会采用静态编译再做一次,为了区分下,所以取了一个叫opencv_share.pc的名字)

 里面的Name:原本是OpenCV,这里被我更改为了OpenCV_share

完毕后,还是拿前面博客里的example.cpp例子来做测试。

#include <opencv2/core/core.hpp>
#include <opencv2/opencv.hpp>
#include <iostream>
 
using namespace cv;
using namespace std;
 
int main()
{
   Mat img = imread("/usr/108.bmp");
   std::cout << "read ok" << std::endl;
   
   imshow("image", img);
   waitKey(0);
 
    return 0;
}
 

在终端中输入如下命令语句,然后运行生成的文件的时候报错

g++ example.cpp -o example1.out $(pkg-config --cflags --libs opencv_share)  -lpthread -lrt -ldl 

这里是找不到动态链接库的路径,所有这里还得在~/.bashrc中加入下面红色线标记处语句,添加一个新的环境变量

 可以看到此目录下有很多需要依赖的动态链接库

 通过环境变量指定后,程序能够正确执行。

注:这里如果不想通过环境变量指定查找路径方式,还可以直接把动态库拷贝到example1.out的所在目录,类似于博主Ubuntu下的基本知识点(一)_jiugeshao的专栏-CSDN博客里面的第四点。这里实验下,去除之前添加的环境变量后,将和opencv相关的动态链接库so文件都拷贝过来,可以发现程序也能正确运行。

博主又实验了如下命令行语句,也能正确编译example.cpp文件

g++ example.cpp -o example1.out -I/home/sxhlvye/opencv-3.4.0/install_share/include/opencv -I/home/sxhlvye/opencv-3.4.0/install_share/include -L/home/sxhlvye/opencv-3.4.0/install_share/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core -lpthread -lrt -ldl

 呼应前面博客说的,编译文件可以采用IDE方式,也可以直接命令行,命令行方式也可以细分用pkg-config方式,还是通过gcc的参数命令 -I 和-L去指定。

g++ -L 和-l && -I参数_xianyoudianxueyuan的专栏-CSDN博客

快速指南:pkg-config 的原理和使用方法_程序猿视角-CSDN博客_pkg-config

 pkg-config的用法及库搜索路径设置_hunanchenxingyu的专栏-CSDN博客_pkg-config 路径

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

Ubuntu下的基本知识点(二) 的相关文章

随机推荐