Linux 下 PC 与 ARM 版 qt + opencv 环境搭建(Qt Creator)
这几天搞 Qt,不小心翻出了很久很久以前写的一个文件,记录的是在 Linux 下,Qt Creator 里面配置 qt 和 opencv 库的过程。
当时是要在嵌入式板子上运行程序,所以我配置了 arm 版的 qt 和 opencv,而在移植到板子上之前,需要在 PC 上调试程序,所以最终结果是 PC 版和 ARM 版都配置了,这也是 Qt 支持多平台的一个体现。
为了迎合当时那个板子,配置过程都是手动下的包,然后自己编译的,这种方式可以安装指定版本的库,apt-get install 安装的版本是固定的。
那个时候的习惯还不够好,所以系统环境什么的也没有记录下来,只是记录了过程,有需要的小伙伴可以参考一下过程:
1. Cmake安装与环境变量配置
从网页https://cmake.org/files/v2.8下载cmake-2.8.8-Linux-i386.tar.gz,然后复制到Ubuntu桌面上,使用命令 cd ~/Desktop 进入桌面,使用解压命令
tar zxvf cmake-2.8.8-Linux-i386.tar.gz –C /usr/local/
将压缩包解压到指定目录/usr/local/中。使用命令
sudo gedit /home/gao/.bashrc
更改环境变量,“gao”为当前用户名,根据需要更改。若要给所有用户添加环境变量,则用语句
sudo gedit /etc/profile
无论哪种方法,打开文件后,在最后添加语句
export PATH=$PATH:/usr/local/cmake-2.8.8-Linux-i386/bin
其中camke的版本为之前下载解压的版本,若不是此版本根据自己情况更改。
接下来验证是否正确安装,使用语句
root@gao:/home# cmake --version
进行检验,句中“gao”为用户名,“#”代表根目录;或直接使用语句
cmake –version
进行检验,如果出现版本号信息,说明安装成功,如果下载的是cmake2.8.8,则版本号信息为
cmake version 2.8.8
2. ffmpeg安装
(参考http://blog.csdn.net/yy3097/article/details/51073445
http://www.linuxidc.com/Linux/2012-05/60233.htm)
tar -zxvf ffmpeg-2.0.1.tar.gz
解压后,编辑profile文件:
sudo apt-get /etc/profile
在文件末尾加上:
export FFMPEG_HOME=/usr/local/ffmpeg
export PATH=$FFMPEG_HOME/bin:$PATH
(如果原来已经配置了java环境变量的话
export PATH=$FFMPEG_HOME/bin:$JAVA_HOME/bin:$PATH
执行 source etc/profile
输出变量 echo $FFMPEG_HOME)
进入到解压的目录中,执行:
./configure --enable-shared --prefix=/usr/local/ffmpeg
--enable-shared 参数据说是允许其编译产生动态库
如果出现异常,提示因为缺少yasm,需要添加参数,再执行以下命令:
./configure --enable-shared --disable-yasm --prefix=/usr/local/ffmpeg
将/usr/local/ffmpeg/lib/pkgconfig中的 .pc 文件拷到 /usr/local/lib/pkgconfig中
验证ffmpeg是否安装好:
ffplay lane.avia
此语句是播放lane.avi的意思。
3. Opencv安装(安装前确认已安装cmake、ffmpeg)
安装前先安装相关包:
sudo apt-get install libgtk2.0-dev pkg-config
将opencv2.4.9安装包拷贝到Ubuntu,然后解压至某目录。进入opencv下的sources目录,在terminal中输入
cmake .
来执行CMakeLists.txt,然后输入
sudo make
以编译文件,然后输入
sudo make install
以安装opencv,OpenCV 会安装在 /usr/local/lib 目录和 /usr/local/include/opencv/
然后配置环境变量,输入
sudo gedit /etc/ld.so.conf.d/opencv.conf
末尾加入/usr/local/lib,保存退出。输入
sudo ldconfig
使配置生效,输入
sudo gedit /etc/bash.bashrc
末尾加入
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
保存退出,输入
sudo source /etc/bash.bashrc
使配置生效,输入
sudo updatedb
以更新database
出现错误时,如“no such directory ”,很可能是没有装好相应的库,按提示装需要装的即可,如缺少libswscale.h时,可新开窗口执行:
sudo apt-get install libswscale-dev
ARM版opencv:
参考http://blog.csdn.net/xy010902100449/article/details/45092757
CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt -ldl
http://blog.csdn.net/u012590688/article/details/45665441
4. QT 库编译
(可参考网页http://www.linuxidc.com/Linux/2014-05/102107p3.htm)
安装之前最好先安装相关的lib,这样可以防止出现编译错误:
sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev libglui-dev
下载安装包qt-everywhere-opensource-src-4.7.1.tar.gz(针对飞凌OK6410),使用root权限将安装包解压至/usr/local。
(1)PC版
进入解压后的目录,修改build-all文件,删掉环境变量设置并修改qt设置,最终如图所示:
然后以root身份运行修改后的文件:
sudo ./build-all
如果出现错误提示“Basic XLib functionality test failed! You might need to modify the include and library search paths by editing QMAKE_INCDIR_X11 and QMAKE_LIBDIR_X11 in/home/zhu/Qt/qt-x11-opensource-src-4.5.2/mkspecs/linux-g++”,则新开一个terminal窗口,安装缺少的包:
sudo apt-get install libX11-dev libXext-dev libXtst-dev
然后再在原来的terminal窗口中重新运行build-all即可,安装需N个小时。
如果最后出现“cannot find”错误时,可能是没有安装某些lib,“/usr/bin/ld:cannotfind –lxxx”意思是编译过程找不到对应库文件,其中-lxxx表示库libxxx-dev。
Qt环境变量配置
(参考http://blog.sina.com.cn/s/blog_6028e2630100ych5.html)
在/etc/profile文件里添加下面几行语句:
export QTDIR=/opt/qtsdk-xxxx/qt 这个路径根据自己安装的位置进行配置
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib
export PATH=$PATH:$QTDIR/bin
保存退出
用qmake –v检查是否成功配置,不行的话重启。
(2)ARM版
编译前先安装tslib,先在终端在执行:
sudo apt-get install autoconf automake libtool
确保所需的gcc和g++已安装,且环境变量配置正确,然后解压tslib至/usr/local,进入/usr/local/tslib,
./configure --host=arm-linux --prefix=/usr/local/tslib/build CC=/usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi-gcc ac_cv_func_malloc_0_nonnull=yes
(编译tslib,执行make时提示undefined reference to `rpl_malloc',是因为config.h.in文件中有
“/* Define to rpl_malloc if the replacement function should be used. */
#undef malloc“
把#undef malloc注释掉重新make即可。)
进入qt解压后的目录,执行
./configure -prefix /usr/local/qt-4.7.1-linux-arm-install -embedded arm -host-little-endian -no-cups -no-3dnow -nomake examples -nomake demos -nomake docs -xplatform /qws/linux-arm-gnueabi-g++
“-prefix”后为安装文件夹
如果报错,提示“-little-endian”或“-big-dian”,则在上一句后加上相应的选择重新执行,本文执行的语句是:
./configure -prefix /usr/local/qt-4.7.1-linux-arm-install -embedded arm -host-little-endian -no-cups -no-3dnow -nomake examples -nomake demos -nomake docs -xplatform /qws/linux-arm-gnueabi-g++ -little-endian
根据提示,输入o和yes,之后就可以进行make和make install了。
如果make之后出现“arm-none-linux-gnueabi-g++ not found”之类的错误,说明程序找不到相应的文件夹,如果确认已安装成功,就需要指定其路径,进入解压后文件夹,进入mkspecs/qws/linux-arm-gnueabi-g++,编辑文件qmake.conf,在所有“arm-none-linux-gnueabi- * ”之类语句之前加上它的路径,我的路径为“/usr/local/arm/4.3.2/bin/”,退出保存,重新./confure和sudo make。
环境变量配置与之前类似
export ARMQTDIR=/usr/local/qt-everywhere-opensource-src-4.7.1/usr/local/qt-4.7.1-linux-arm-install(根据自己安装的路径更改)
export PATH=$ARMQTDIR/bin:$PATH
export LD_LIBRARY_PATH=$ARMQTDIR/lib:$LD_LIBRARY_PATH
5. QT creator安装与配置
(参考网页http://blog.csdn.net/lanbing510/article/details/41698517)
下载的是qt-creator-linux-x86-opensource-2.4.1.bin,直接运行然后安装。然后运行qt creator,在tools的option对话框中点击左侧Build & Run,然后点击右面add,路径为所需要添加qmake的路径。我的路径添加了两个,一个是PC版qmake一个是arm版qmake,路径分别为/opt/qt-4.7.1/bin/qmake、/usr/local/qt-everywhere-opensource-src-4.7.1/usr/local/qt-4.7.1-linux-arm-install/bin/qmake。cmake路径为/usr/bin/cmake。点击ok关闭option对话框。
如果添加qmake时出现“default mkspec symlink is broken”错误时,说明链接出现问题,进入mkspecs文件夹删除default,然后运行
ln -s qws/linux-arm-gnueabi-g++ default
以此新建一个链接。
如果出现“No qmlviewer installed”错误,则先找到qmlviewer的位置,然后将其复制到qt-4.7.1-linux-arm-install/bin/下即可。
建立C++文件步骤:先建立new project,选择其他项目中的空qt项目。之后,会出现一个空项目。在项目名上右键,选择add,然后选择C++ source文件,一个空的C++文件就建好了。运行程序按钮在左下角。
项目的编译工具可在项目中点击左侧project进行设定,选择需要的qmake。