<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 嵌入式linux新手入門手記-準(zhǔn)備qt5.4.1開發(fā)平臺

          嵌入式linux新手入門手記-準(zhǔn)備qt5.4.1開發(fā)平臺

          作者: 時間:2016-03-01 來源:網(wǎng)絡(luò) 收藏

            這個手記寫到這里,的軟件平臺已經(jīng)能夠正常工作了, tslib也已經(jīng)能夠進(jìn)行正確的觸摸屏校正,自己編寫一個hello world的程序,并交叉編譯后,能夠在上運(yùn)行,并在超級終端上打印出“hello world”。

          本文引用地址:http://www.ex-cimer.com/article/201603/287664.htm

            那么,我們正式開始搭建qt的開發(fā)平臺,我的ubuntu上安裝的是qt5.4.1,并已經(jīng)寫了一個hello world的qt程序,這個程序非常簡單,就是運(yùn)行后在桌面上顯示一個窗口,窗口中顯示一行文字“hello world”,以及一個按鍵。鼠標(biāo)點(diǎn)擊按鍵退出程序。

            ubuntu的qt安裝在/home/XXXX/qt5.4.1目錄下,QtCreator也安裝在相同目錄下,上述的qtdemo程序用QtCreator創(chuàng)建并編譯通過。

            為保證和ubuntu平臺的一致性,決定的平臺移植qt5.4.1,首先到qt的官網(wǎng)下載源代碼:http://download.qt.io/official_releases/qt/5.4/5.4.1/single/qt-everywhere-opensource-src-5.4.1.tar.gz。下載可以使用git,也可以用瀏覽器直接打開這個連接。將下載到的壓縮文件解壓縮到./source目錄下,進(jìn)入到./source目錄下執(zhí)行configure工具生成編譯選項(xiàng),這里要進(jìn)行三步工作:

            A、設(shè)置交叉編譯的環(huán)境變量。這里需要注意一點(diǎn),我們在交叉編譯qt5.4.1的工具包時,涉及到2種不同的編譯:第一種是使用ubuntu安裝的GCC和G++編譯qmake工具,這些qmake工具將運(yùn)行在ubuntu下,用于將后續(xù)自己編寫的qt應(yīng)用程序的源代碼編譯成能夠運(yùn)行在arm平臺上的目標(biāo)可執(zhí)行程序;第二種是使用arm-linux-gnueabihf編譯器,將qt5.4.1的庫編譯成運(yùn)行于arm平臺的靜態(tài)庫或者共享庫。

            export QT_INSTALL_DIR=/home/XXXX/Qt541arm #設(shè)定編譯好的qt包的安裝路徑

            export ARCH=arm #設(shè)定目標(biāo)cpu架構(gòu)

            export LIBRARY_PATH=$LIBRARY_PATH:/usr/lib/i386-linux-gnu #為后續(xù)的編譯設(shè)定庫路徑

            B、編輯./qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf。mkspecs目錄下有很多的保存.conf文件的目錄,分別對應(yīng)不同的操作系統(tǒng)和交叉編譯平臺,我這里使用linux-arm-gnueabi-g++平臺的配置文件進(jìn)行交叉編譯。

            MAKEFILE_GENERATOR = UNIX

            CONFIG += incremental gdb_dwarf_index

            QMAKE_INCREMENTAL_STYLE = sublib

            include(../common/linux.conf)

            include(../common/gcc-base-unix.conf)

            include(../common/g++-unix.conf)

            QT_QPA_DEFAULT_PLATFORM=linuxfb

            COMPILER_FLAGS += -o3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard

            QMAKE_CFLAGS_RELEASE += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard

            QMAKE_CXXFLAGS_RELEASE += -O3 -march=armv7-a -mtune=cortex-a8 -mfpu=vfpv3 -mfloat-abi=hard

            QT_INSTALL_DIR = /home/XXXX/Qt541arm

            QMAKE_INCDIR += /usr/tslib/include

            QMAKE_LIBDIR += /usr/tslib/lib

            LIBS += -ldl -fPIC -lts

            QMAKE_CC = arm-linux-gnueabihf-gcc

            QMAKE_CXX = arm-linux-gnueabihf-g++

            QMAKE_LINK = arm-linux-gnueabihf-g++

            QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++

            QMAKE_AR = arm-linux-gnueabihf-ar cqs

            QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy

            QMAKE_NM = arm-linux-gnueabihf-nm -P

            QMAKE_STRIP = arm-linux-gnueabihf-strip

            load(qt_config)

            一定要正確設(shè)置QMAKE_INCDIR和QMAKE_LIBDIR,指向正確的編譯后tslib安裝目錄下的include和lib目錄。否則交叉編譯qt5.4.1時會出現(xiàn)找不到頭文件的錯誤。

            LIBS的幾個設(shè)置比較重要,-lts是在后續(xù)的交叉編譯應(yīng)用時增加tslib庫。-fPIC用于在編譯時生產(chǎn)位置無關(guān)代碼,-ldl設(shè)置用顯示方法調(diào)用相關(guān)的函數(shù)調(diào)用。

            這里額外提一句,交叉編譯器中有一個工具arm-linux-gnueabihf-readelf,非常實(shí)用,利用這個工具能夠查看應(yīng)用程序的可執(zhí)行文件的各種信息,例如使用arm-linux-gnueabihf-readelf -d qtdemo,可以查看qtdemo中包含并使用哪一些共享庫。

            C、執(zhí)行./configure進(jìn)行配置:

            我編輯了一個sh文件,用于進(jìn)行配置,這樣方便后續(xù)使用:

            #!/bin/sh

            ./configure -v 

            -release 

            -opensource 

            -confirm-license 

            -make libs 

            -optimized-qmake 

            -platform linux-g++ 

            -xplatform linux-arm-gnueabi-g++ 

            -prefix /home/XXXX/Qt541arm 

            -pch 

            -qt-libjpeg 

            -qt-libpng 

            -qt-zlib 

            -qt-sql-sqlite 

            -tslib 

            -qreal float 

            -linuxfb 

            -no-evdev 

            -no-egl 

            -no-eglfs 

            -no-opengl 

            -no-directfb 

            -no-sql-db2 

            -no-sql-ibase 

            -no-sql-mysql 

            -no-sql-oci 

            -no-sql-odbc 

            -no-sql-psql 

            -no-sql-sqlite2 

            -no-sql-tds 

            -no-xcb 

            -no-xcb-xlib 

            -no-icu 

            -no-c++11 

            -no-cups 

            -no-iconv 

            -no-android-style-assets 

            -nomake examples 

            -nomake tests 

            這里重點(diǎn)地方是:

            1、用-platform指定交叉編譯的平臺,這個是錯誤的,這個選項(xiàng)是指定編譯qmake工具的平臺,由于我的qmake是需要運(yùn)行在ubuntu上,所以這個選項(xiàng)指定的qmake.conf中必須將編譯工具指向ubuntu的GCC和G++;

            而-xplatform才是指定共享庫等,以及最終的qt應(yīng)用程序的運(yùn)行平臺的。-xplatform告訴configure使用哪一個交叉編譯工具編譯qt5.4.1開發(fā)包的lib。這個選項(xiàng)指定的qmake.conf中必須將編譯工具指向arm的交叉編譯工具,并設(shè)定相關(guān)的編譯選項(xiàng)。

            2、第一次編譯好arm的qt5.4.1開發(fā)包,并將這個qt5.4.1開發(fā)包中的lib和plugins目錄下的內(nèi)容全部拷貝到arm目標(biāo)平臺的nfs文件系統(tǒng)中的/opt/qt541arm目錄中。用這個包的qmake編譯我的qtdemo程序,然后將可執(zhí)行文件拷貝到arm板的nfs文件系統(tǒng)中。正確設(shè)定運(yùn)行環(huán)境后,運(yùn)行qtdemo出錯,提示could not

            find or load a platform。不能打開顯示平臺,這個錯誤我大約花了2天時間,后來發(fā)現(xiàn)關(guān)鍵在上面的configure時,如果使用了-linuxfb,則必須-no-egl,-no-eglfs,-no-directfb,-no-opengl將其他的顯示平臺關(guān)閉,要不然后續(xù)編譯qtdemo并運(yùn)行時,就會出現(xiàn)不能找到或者裝載顯示平臺,有效地顯示平臺是:......的錯誤。

            當(dāng)然,運(yùn)行qt應(yīng)用程序之前,需要保證你的qt的運(yùn)行環(huán)境變量設(shè)置是正確的。使用上述的configure成功配置好編譯環(huán)境后,最后應(yīng)該顯示出qt5.4.1開發(fā)包的包含項(xiàng),以及編譯后的安裝位置等:

            Building on: linux-g++ (i386, CPU features: none detected)

            Building for: linux-arm-gnueabi-g++ (arm, CPU features: none detected)

            qmake vars .......... styles += mac fusion

            windows DEFINES += QT_NO_MTDEV DEFINES += QT_NO_EVDEV sql-drivers = sqlite sql-plugins = qmake switches .........

            Build options:

            Configuration .......... accessibility alsa audio-backend clock-gettime

            clock-monotonic compile_examples concurrent cross_compile dbus eventfd freetype

            full-config getaddrinfo getifaddrs harfbuzz inotify ipv6ifname large-config

            largefile libudev linuxfb medium-config minimal-config mremap nis no-pkg-config openssl pcre png

            posix_fallocate precompile_header qpa qpa reduce_exports release rpath shared

            small-config tslib zlib

            Build parts ............ libs

            Mode ................... release

            Using C++11 ............ no

            Using gold linker....... no

            Using PCH .............. yes

            Target compiler supports:

            Neon ................. no

            Qt modules and options:

            Qt D-Bus ............... yes (loading dbus-1 at runtime)

            Qt Concurrent .......... yes

            Qt GUI ................. yes

            Qt Widgets ............. yes

            Large File ............. yes

            QML debugging .......... yes

            Use system proxies ..... no

            Support enabled for:

            Accessibility .......... yes

            ALSA ................... yes

            CUPS ................... no

            Evdev .................. no

            FontConfig ............. no

            FreeType ............... yes (bundled copy)

            Glib ................... no

            GTK theme .............. no

            HarfBuzz ............... yes (bundled copy)

            Iconv .................. no

            ICU .................... no

            Image formats:

            GIF .................. yes (plugin, using bundled copy)

            JPEG ................. yes (plugin, using bundled copy)

            PNG .................. yes (in QtGui, using bundled copy)

            journald ............... no

            mtdev .................. no

            Networking:

            getaddrinfo .......... yes

            getifaddrs ........... yes

            IPv6 ifname .......... yes

            OpenSSL .............. yes (loading libraries at run-time)

            NIS .................... yes

            OpenGL / OpenVG:

            EGL .................. no

            OpenGL ............... no

            OpenVG ............... no

            PCRE ................... yes (bundled copy)

            pkg-config ............. no

            PulseAudio ............. no

            QPA backends:

            DirectFB ............. no

            EGLFS ................ no

            KMS .................. no

            LinuxFB .............. yes

            XCB .................. no

            Session management ..... yes

            SQL drivers:

            DB2 .................. no

            InterBase ............ no

            MySQL ................ no

            OCI .................. no

            ODBC ................. no

            PostgreSQL ........... no

            SQLite 2 ............. no

            SQLite ............... qt-qt

            TDS .................. no

            udev ................... yes

            xkbcommon .............. no

            zlib ................... yes (bundled copy)

            Info: creating super cache file /home/XXX/temp/source/.qmake.super

            Qt is now configured for building. Just run 'make'.

            Once everything is built, you must run 'make install'.

            Qt will be installed into /home/XXXX/Qt541arm

            Prior to reconfiguration, make sure you remove any leftovers from the previous build.

            上述準(zhǔn)確無誤后,執(zhí)行make -j4編譯qt5.4.1開發(fā)包,這里的-j4是通知編譯器使用4線程編譯,這個數(shù)字根據(jù)當(dāng)前運(yùn)行平臺的CPU核心數(shù)來設(shè)置。使用多線程編譯能夠極大提高編譯速度。我的i3-2350計(jì)算機(jī),編譯一次qt5.4.1開發(fā)包的時間大約是40分鐘左右(不過這個也和需要編譯的qt5.4.1的包含項(xiàng)的多少有關(guān))。

            編譯成功后,執(zhí)行make install將qt5.4.1開發(fā)包安裝到configure時-prefix指定的目錄中。然后將安裝目錄中的lib和plugins目錄拷貝到arm的nfs文件系統(tǒng)中的/opt/qt541arm目錄下(當(dāng)然,這個目錄的設(shè)置看個人的興趣愛好:) )。 



          關(guān)鍵詞: 嵌入式linux am335x

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();