【问题标题】:Cross-compiling Qt for Pandaboard为 Pandaboard 交叉编译 Qt
【发布时间】:2023-03-29 23:17:01
【问题描述】:

我花了数周时间尝试为我的 Panda 板交叉编译 Qt,但没办法,我无法通过 ./configure。如果有人可以帮助我,我将不胜感激。

我的主机系统是 Ubuntu-13.04 ×86_64bit(running un Virtualbox)

我的目标系统是 Pandaboard ES Ubuntu-12.04。

主机箱中的所有步骤:

sudo apt-get install arm-linux-gnueabihf

sudo mkdir /opt/qt-485-armhf

cd /usr/src

sudo wget http://download.qt-project.org/official_releases/qt/4.8/4.8.5/qt-everywhere-opensource-src-4.8.5.tar.gz

sudo tar xf qt-everywhere-opensource-src-4.8.5.tar.gz

cd /usr/src/qt-everywhere-opensource-src-4.8.5

sudo cp -r mkspecs/qws/linux-arm-gnueabi-g++ mkspecs/qws/linux-arm-gnueabihf-g++

sudo vim mkspecs/qws/linux-arm-gnueabihf-g++/qmake.conf
-------------------------------
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)

#Compiler Flags to take advantage of the ARM architecture
#N.B.:I also tried to uncomment the two following instructions with no success   
QMAKE_CFLAGS = -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard
QMAKE_CXXFLAGS = -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard

# modifications to g++.conf
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++

# modifications to linux.conf
QMAKE_AR                = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY           = arm-linux-gnueabihf-objcopy
QMAKE_STRIP             = arm-linux-gnueabihf-strip

load(qt_config)
---------------------------------

sudo sed -i -e "/#if/d" -e "/#error/d" -e "/#endif/d" config.tests/unix/libmng/libmng.cpp (This command fixes detection of libmng 2.0.)
export QTDIR=/opt/qt4-485-armhf
And finally:
sudo ./configure -prefix /opt/qt4-485-armhf -sysconfdir /etc/xdg -embedded arm -little-endian -host-big-endian -no-qt3support -nomake examples -nomake demos -opensource -confirm-license -release -openssl-linked -no-phonon -no-phonon-backend -no-nis -platform qws/linux-x86_64-g++ -xplatform qws/linux-arm-gnueabihf-g++ -optimized-qmake

With this result:
Creating qmake. Please wait...
g++ -c -o option.o -pipe -m64 -DQMAKE_OPENSOURCE_EDITION -O2 -g -I. -Igenerators -Igenerators/unix -Igenerators/win32 -Igenerators/mac -Igenerators/symbian -Igenerators/integrity -I/usr/src/qt-everywhere-opensource-src-4.8.5/include -I/usr/src/qt-everywhere-opensource-src-4.8.5/include/QtCore -I/usr/src/qt-everywhere-opensource-src-4.8.5/src/corelib/global -I/usr/src/qt-everywhere-opensource-src-4.8.5/src/corelib/xml -I/usr/src/qt-everywhere-opensource-src-4.8.5/tools/shared -DQT_NO_PCRE -DQT_BUILD_QMAKE -DQT_BOOTSTRAPPED -DQLIBRARYINFO_EPOCROOT -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_NO_COMPONENT -DQT_NO_STL -DQT_NO_COMPRESS -I/usr/src/qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-x86_64-g++ -DHAVE_QCONFIG_CPP -DQT_NO_THREAD -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_DEPRECATED  option.cpp
g++ -o "/usr/src/qt-everywhere-opensource-src-4.8.5/bin/qmake" project.o property.o main.o makefile.o unixmake2.o unixmake.o mingw_make.o option.o winmakefile.o projectgenerator.o meta.o makefiledeps.o metamakefile.o xmloutput.o pbuilder_pbx.o borland_bmake.o msvc_vcproj.o msvc_vcxproj.o msvc_nmake.o msvc_objectmodel.o msbuild_objectmodel.o symmake.o initprojectdeploy_symbian.o symmake_abld.o symmake_sbsv2.o symbiancommon.o registry.o epocroot.o gbuild.o qtextcodec.o qutfcodec.o qstring.o qtextstream.o qiodevice.o qmalloc.o qglobal.o qbytearray.o qbytearraymatcher.o qdatastream.o qbuffer.o qlist.o qfile.o qfilesystementry.o qfilesystemengine_unix.o qfilesystemengine.o qfilesystemiterator_unix.o qfsfileengine_unix.o qfsfileengine.o qfsfileengine_iterator.o qregexp.o qvector.o qbitarray.o qdir.o qdiriterator.o quuid.o qhash.o qfileinfo.o qdatetime.o qstringlist.o qabstractfileengine.o qtemporaryfile.o qmap.o qmetatype.o qsettings.o qsystemerror.o qlibraryinfo.o qvariant.o qvsnprintf.o qlocale.o qlocale_tools.o qlocale_unix.o qlinkedlist.o qnumeric.o qcryptographichash.o qxmlstream.o qxmlutils.o  


You have not explicitly asked to use pkg-config and are cross-compiling.
pkg-config will not be used to automatically query cflag/lib parameters for
dependencies


The system floating point format could not be detected.
This may cause data to be generated in a wrong format
Turn on verbose messaging (-v) to see the final report.
OpenSSL support cannot be enabled due to functionality tests!
 Turn on verbose messaging (-v) to ./configure to see the final report.
 If you believe this message is in error you may use the continue
 switch (-continue) to ./configure to continue.

提前致谢。

【问题讨论】:

  • 你为什么不使用 Qt 5? QWS 的混乱根本不值得处理...... ;-)
  • 其实我连QtQuick2都没有提过……另外,软件opengl也适合QtQuick2……
  • Laszlo:感谢您的回答。我已经在主机和目标机器上都安装了 QT4。我在两者中都成功编译并在本地运行。此外,我已经在主机中安装了也成功编译的 Angstrom arm 工具链,但是编译后的应用程序未在目标机器中运行,它退出时出现未找到文件的消息,我认为出现问题是因为 angstrom 工具链适用于 gnueabi 和 OMAP4430需要 gnueabihf,因此我正在尝试在我的主机箱中构建一个 gnueabihf 工具链。
  • 还有一点,奇怪的是你使用gnueabihf,其中hf应该代表硬件浮动,然后是-mfloat-abi=softfp

标签: qt ubuntu arm cross-compiling pandaboard


【解决方案1】:

要在 PC 上交叉编译程序,您必须在 PC 上安装与 development 文件相同的软件包作为 ARM 目标。 Qt 4.8 依赖于OpenSSL,所以如果你想编译Qt,你必须为ARM 版本获取正确的开发文件em>。

  1. 安装 Ubuntu 12.04 PC 虚拟机。 与董事会版本相同。
  2. 获取编译器。 apt-get install arm-linux-gnueabihf(你知道的)。
  3. 获取required development packages。 apt-get install libssl-dev 或
    apt-get build-dep -aarmhf qt4(仅适用于 X11)。
  4. 编辑您的 Qt 配置以满足您的需求并构建它。

您当前缺少的步骤是第 3 步;但要执行它,您需要 step 1 或其他方式来获取 Ubuntu 12.04 的 OpenSSL 开发文件。使用 apt.sources 可能还有其他方法可以做到这一点。我认为上述步骤对您来说是最简单的。

【讨论】:

  • 好的,我安装了libssl-dev,Openssl错误消失了,但浮点格式的错误仍然存​​在。感谢您的宝贵时间。
  • 我被添加了 -armfpa 并且错误仍然存​​在。我没有找到有关此开关的文档。我下载的文件中不存在 mkspecs/qws/pandaboard 文件夹(qt-everywhere-opensource-src-4.8.5)。
  • 我已经尝试过两者都没有成功,当我写问题时,我粘贴了许多尝试之一的文本。实际上我没有看到任何使用此开关的示例。
  • 那么使用-embedded arm -little-endian -host-little-endian -armfpa,您仍然有浮点检测问题吗?您是否也可以使用-v 选项并提供一些相关的配置输出?这没有意义;我正在阅读配置脚本,这不应该发生。你确定你有所有这些选择。这些选项都没有双破折号,只有单。
  • 我不知道会发生什么,但浮点错误神奇地消失了。我唯一要做的就是重新启动Virtualbox并添加-v来配置字符串我不写一个新的只是使用缓存按下向上箭头键并添加-v。 “您没有明确要求使用 pkg-config...”错误仍然存​​在。现在配置配置运行直到结束,并显示大量消息,例如“由于缺少 GLib/Gio/GStreamer 而禁用视频”。或“找不到:生成的/DrawingAreaMessageReceiver.cpp”。但那肯定是另一段历史了。对我来说太晚了,我需要睡觉,非常感谢您的宝贵时间。
【解决方案2】:

这是另一种方法。因为您要使用 Qt,所以不一定需要 Ubuntu。带有 Qt Embedded 的简单 rootfs 就足够了。

我将描述如何使用Buildroot(BR) 创建 rootfs 和您的应用程序。 BR 已经为 Pandaboard 提供了config file。您只需下载 BR 并执行:

make pandaboard_defconfig

之后,您可以在 menuconfig 中选择 Qt4 和 Qt5。

对于您的应用程序,我建议使用CMake infrastructure,但这只是个人喜好问题。这篇文章是关于BR中的source directory override mechanism。

【讨论】:

  • yegorich:感谢您的回答,我会阅读文档并最终测试您的方法,但是,问题是,如果我没有 Ubuntu,我将如何安装和升级软件包?我现在使用 apt-get 来完成。很抱歉这个问题,但我是 Linux 世界的新手,直到现在我只使用 Ubuntu。
  • @HMarioD 这是 BR 的一个缺点/功能:它的使用和扩展非常简单,但是您没有 Debian/Ubuntu 中的包概念。如果要更新某些程序,则必须手动编译新版本并复制文件,或者只创建全新的映像/rootfs。 BR 适用于专门的任务,您知道从一开始就需要什么软件来完成任务,因此您无需在之后安装新软件包。另一个嵌入式发行版angstrom-distribution.org 有包,但我没有太多经验。
  • 感谢您的回答,我认为这不适合我的项目,实际上我已经在主机和目标机器上运行和编译了 Ubuntu 和 QT,我需要的是避免在目标机器上进行编辑和编译主机中的所有开发和 Pandaboard 目标的交叉编译。还是谢谢。
  • @HMarioD 这正是他所描述的。现有的 Qt 是如何进入您的 ARM 板的?您是否从某个地方加载了一些图像?该图像位于何处?您使用了一些 Ubuntu 安装程序来安装它吗?您希望使用现有的 ARM Ubuntu 文件系统并升级/安装 Qt。对吗?
  • @artlessnoise,我从 Ubuntu 站点获得 ubuntu-12.04-preinstalled-desktop-armhf+omap.img,dd 到 sd 卡。进行升级,从安装程序安装 OMAP4 的附加驱动程序,使用 apt-get 从终端安装 QT。我的理想目标是将 Panda 的 QT5 交叉编译作为目标,我需要运行一个播放宣传视频的应用程序只有一个窗口,该应用程序已经在我的 PC(IMAC)中运行,我使用 QT5 小部件进行开发。我不关心女巫会成为目标系统,只是因为我喜欢而选择 ubuntu。
【解决方案3】:

尝试在您的 Pandaboard Ubuntu 操作系统中从 gcc 中获取版本,如果是相同的 arm-linux-gnueabihf-gcc 版本或低于 4.6 的版本,则提示您的 qmake.config 中的配置

#QMAKE_CFLAGS = -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard
#QMAKE_CXXFLAGS = -march=armv7-a -mtune=cortex-a9 -mfpu=neon -mfloat-abi=hard

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多