1. 程式人生 > >Linux 下 PC 與 ARM 版 qt + opencv 環境搭建(Qt Creator)

Linux 下 PC 與 ARM 版 qt + opencv 環境搭建(Qt Creator)

2-0 swscale 更新 tab endian fig fur 小夥伴 lib

這幾天搞 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。

1PC

進入解壓後的目錄,修改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。

Linux 下 PC 與 ARM 版 qt + opencv 環境搭建(Qt Creator)