您的位置 首页 解答

嵌入式linux新手入门手记-预备qt5.4.1开发渠道

这个手记写到这里,am335x的软件平台已经能够正常工作了,tslib也已经能够进行正确的触摸屏校正,自己编写一个helloworld的程序,并交叉编译后,能够在am335x上运行,并在超级终端上

  这个手记写到这儿,am335x的软件渠道现已可以正常作业了, tslib也现已可以进行正确的触摸屏校对,自己编写一个hello world的程序,并穿插编译后,可以在am335x上运转,并在超级终端上打印出“hello world”。

  那么,咱们正式开端建立qt的开发渠道,我的ubuntu上装置的是qt5.4.1,并现已写了一个hello world的qt程序,这个程序十分简略,便是运转后在桌面上显现一个窗口,窗口中显现一行文字“hello world”,以及一个按键。鼠标点击按键退出程序。

  ubuntu的qt装置在/home/XXXX/qt5.4.1目录下,QtCreator也装置在相同目录下,上述的qtdemo程序用QtCreator创立并编译经过。

  为确保和ubuntu渠道的一致性,决议am335x的渠道移植qt5.4.1,首先到qt的官网下载源代码:http://download.qt.io/official_releases/qt/5.4/5.4.1/single/qt-everywhere-opensource-src-5.4.1.tar.gz。下载可以运用git,也可以用浏览器直接翻开这个衔接。将下载到的压缩文件解压缩到./source目录下,进入到./source目录下履行configure东西生成编译选项,这儿要进行三步作业:

  A、设置穿插编译的环境变量。这儿需求留意一点,咱们在穿插编译qt5.4.1的东西包时,涉及到2种不同的编译:第一种是运用ubuntu装置的GCC和G++编译qmake东西,这些qmake东西将运转在ubuntu下,用于将后续自己编写的qt应用程序的源代码编译成可以运转在arm渠道上的方针可履行程序;第二种是运用arm-linux-gnueabihf编译器,将qt5.4.1的库编译成运转于arm渠道的静态库或许同享库。

  export QT_INSTALL_DIR=/home/XXXX/Qt541arm #设定编译好的qt包的装置途径

  export ARCH=arm #设定方针cpu架构

  export LIBRARY_PATH=$LIBRARY_PATH:/usr/lib/i386-linux-gnu #为后续的编译设定库途径

  B、修改./qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf。mkspecs目录下有许多的保存.conf文件的目录,别离对应不同的操作体系和穿插编译渠道,我这儿运用linux-arm-gnueabi-g++渠道的装备文件进行穿插编译。

  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)

  一定要正确设置QMAKE_INCDIR和QMAKE_LIBDIR,指向正确的编译后tslib装置目录下的include和lib目录。不然穿插编译qt5.4.1时会呈现找不到头文件的过错。

  LIBS的几个设置比较重要,-lts是在后续的穿插编译应用时添加tslib库。-fPIC用于在编译时出产方位无关代码,-ldl设置用显现办法调用相关的函数调用。

  这儿额定提一句,穿插编译器中有一个东西arm-linux-gnueabihf-readelf,十分有用,运用这个东西可以检查应用程序的可履行文件的各种信息,例如运用arm-linux-gnueabihf-readelf -d qtdemo,可以检查qtdemo中包括并运用哪一些同享库。

  C、履行./configure进行装备:

  我修改了一个sh文件,用于进行装备,这样便利后续运用:

  #!/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 \

  这儿要点当地是:

  1、用-platform指定穿插编译的渠道,这个是过错的,这个选项是指定编译qmake东西的渠道,因为我的qmake是需求运转在ubuntu上,所以这个选项指定的qmake.conf中有必要将编译东西指向ubuntu的GCC和G++;

  而-xplatform才是指定同享库等,以及终究的qt应用程序的运转渠道的。-xplatform告知configure运用哪一个穿插编译东西编译qt5.4.1开发包的lib。这个选项指定的qmake.conf中有必要将编译东西指向arm的穿插编译东西,并设定相关的编译选项。

  2、第一次编译好arm的qt5.4.1开发包,并将这个qt5.4.1开发包中的lib和plugins目录下的内容悉数拷贝到arm方针渠道的nfs文件体系中的/opt/qt541arm目录中。用这个包的qmake编译我的qtdemo程序,然后将可履行文件拷贝到arm板的nfs文件体系中。正确设定运转环境后,运转qtdemo犯错,提示could not

  find or load a platform。不能翻开显现渠道,这个过错我大约花了2天时刻,后来发现要害在上面的configure时,假如运用了-linuxfb,则有必要-no-egl,-no-eglfs,-no-directfb,-no-opengl将其他的显现渠道封闭,要不然后续编译qtdemo并运转时,就会呈现不能找到或许装载显现渠道,有效地显现渠道是:……的过错。

  当然,运转qt应用程序之前,需求确保你的qt的运转环境变量设置是正确的。运用上述的configure成功装备好编译环境后,最终应该显现出qt5.4.1开发包的包括项,以及编译后的装置方位等:

  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.

  上述准确无误后,履行make -j4编译qt5.4.1开发包,这儿的-j4是告诉编译器运用4线程编译,这个数字依据当时运转渠道的CPU中心数来设置。运用多线程编译可以极大进步编译速度。我的i3-2350计算机,编译一次qt5.4.1开发包的时刻大约是40分钟左右(不过这个也和需求编译的qt5.4.1的包括项的多少有关)。

  编译成功后,履行make install将qt5.4.1开发包装置到configure时-prefix指定的目录中。然后将装置目录中的lib和plugins目录拷贝到arm的nfs文件体系中的/opt/qt541arm目录下(当然,这个目录的设置看个人的兴趣爱好:) )。 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/jieda/115428.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部