【问题标题】:Porting and running a simple Qt Program to FriendlyARM-embedded devices将简单的 Qt 程序移植和运行到 FriendlyARM 嵌入式设备
【发布时间】:2014-01-22 18:49:07
【问题描述】:

如您所知,下载 QT 的主要来源是 http://qt-project.org/downloads.

在 Qt 5.0 之前,有一个 Qt for Embedded Linux 的链接,例如: qt-everywhere-opensource-src-4.8.5.tar.gz

我认为它在某种程度上是 Qtopia 的替代品。另外,我认为“无处不在”的意思是“嵌入式”。 我的假设是否正确?

如果我的假设是正确的,是否可以使用上述无处不在的版本而不是旧的 Qtopia?

另一个问题是:我将 Qtopia 配置为静态构建库(使用默认 -shared)然后我构建它并成功安装它。

现在我在主机上安装了 Qtopia 4.3.5 嵌入式 ARM 软件,默认路径如下: /usr/local/Trolltech/QtopiaCore4.3.5embedded-arm

问:为什么/bin目录下没有设计器程序。

我只有以下二进制文件: moc、qmake、rcc、uic 然后我用 QApplication 和 QLabel 类编写了一个典型的 hello world Qt:

    #include <QApplication>
    #include <QLabel>

    int main(argc, char* argv[])
    {
       QApplication app(argc, argv);
       QLabel Hello("Hello");
       Hello.show();
       return app.exec();  
    }

我用新安装的 qmake 编译了这段代码,完全没问题。 如果二进制的名称是 qt_hello,我有以下输出:

# 文件 qt_hello

ELF 32 位 LSB 可执行文件,ARM,版本 1(SYSV),动态链接(使用共享库), 对于 GNU/Linux 2.6.32,未剥离

现在,当我将二进制文件移植到 ARM 嵌入式设备板(使用闪存盘 USB)时, 并运行它,我有以下输出:

# ./qt_hello 加载共享库时出错:libQtGui.so.4:无法打开共享对象文件:没有这样的文件或目录。

根据错误消息,我想,我应该配置尝试使用 -static 选项再次配置 Qtopia。我使用了以下 命令: ./configure -embedded arm -xplatform qws/linux-arm-g++ -depths 16,3 -nomake examples
-nomake tests -static
几个小时后,软件配置、构建和安装成功, 在 qmaking 我的 hello 程序之后,不幸的是它是链接共享的,我有上述错误 在 ARM 嵌入式设备上?

我错过了什么吗?请提供一些启示。

仅供参考,Qtopia4.6.3 安装在 ARM 嵌入式设备上

-- Saeed Amrollahi Boyouki

【问题讨论】:

    标签: c++ linux qt qmake qtgui


    【解决方案1】:

    你似乎在这里混合了两种完全不同的东西:

    • 非常古老的Qtopia

    • 旧 4.8.5

    正如in your other thread 所建议的那样,使用 5.2.0 将更适合此任务。话虽如此,让我来回答您的问题:

    如果我的假设是正确的,是否可以使用上述无处不在的版本而不是旧的 Qtopia?

    是的,没错。

    问:为什么/bin目录下没有设计器程序。

    我认为您必须将它与 Qt 库分开安装,就像 QtCreator 一样。

    ./qt_hello 加载共享库时出错:libQtGui.so.4: cannot open shared object file: no such file or directory.

    这意味着您的嵌入式板上的库路径中没有 qt gui 动态库,默认情况下,该库路径是系统范围内通常安装 Qt 的位置。

    几个小时后,软件配置,构建和安装成功,在qmake我的hello程序之后,不幸的是它被链接共享并且我在ARM嵌入式设备上出现了上述错误?我错过了什么吗?请提供一些启示。

    我想你忘了静态链接到 Qt 库。例如,尝试在项目的 qmake 项目文件中明确指定静态库,如下所示:

    LIBS += libQtGui.a # cannot recall the name correctly, but it is easy to check
    

    【讨论】:

    • Laszlo 我添加了上述行,但是在制作项目期间,编译器出现错误:arm-none-linux-gnueabi-g++: libQtGui.a: no such file or directory。
    • @SaeedAmrollahiBoyouki:您是否检查过您的库路径和/或链接所在的当前工作目录中是否有这样的文件?
    • Laszlo Papp:是的,我有几个这样的文件:libQtGui.{a|.la|.prl| .so|.so.4|.so.4.3|.so.4.3.5|} .so、.so.4、.so.4.3 是最后一个的符号链接。它们位于 /lib 目录中。顺便说一句,如果我运行 ldconfig -p,上面的文件没有条目,但我只有一个条目:libQtGui.so.4 (libc6) => /usr/lib/i365-linux-gnu/libQtGui.so.4 . Q. 如何添加/lib到库路径?
    • @SaeedAmrollahiBoyouki: LIBS += -L/lib libQtGui.a
    • 再次,我遇到了原始错误。仅供参考,如果我使用小写 L 和 /lib/libQtGui.a,我会遇到这个错误:arm-none-linux-gnueabi/bin/ld: cannot find libQtGui.a that based使用 -l 与 -L 应用程序是合理的。
    猜你喜欢
    • 2011-11-06
    • 2011-02-10
    • 2023-03-21
    • 2010-10-08
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多